최원태
가입: 2006년 9월 16일 올린 글: 369
|
올려짐: 2008년10월9일 1:29 주제: 6번째 실습에서 사용할 함수들 |
|
|
10/8일 6번째 실습의 두 번째 문제에서 사용할 함수정의 모음입니다.
Dr.scheme에 붙여넣고 <??>부분을 채워주시면 됩니다.
코드: | ;;Given functions
;list of interval value generator
(define (enumerate-interval base end)
(if (> base end) () (cons base (enumerate-interval (+ 1 base) end))))
;accumulate function
(define (accumulate op init seq)
(if (null? seq)
init
(op (car seq)
(accumulate op init (cdr seq)))))
;empty-position-set
(define empty-b null)
;add new position to position set
(define (adjoin-p column row set)
(cons (cons column row) set))
;safety checker
(define (safe? p)
(define (myAnd x y) (and x y))
(define (safe?-aux x y)
(not (or (equal? (+ (car x) (cdr x)) (+ (car y) (cdr y)))
(equal? (- (car x) (cdr x)) (- (car y) (cdr y)))
(equal? (cdr x) (cdr y)))))
(accumulate myAnd #t (map (lambda (x) (safe?-aux x (car p))) (cdr p))))
;top-function : qprint : run quuens procedure with pretty printing
(define (qprint size)
(define (qprint-aux sol)
(define (print-cell x y sol)
(if (= 0 (length (filter (lambda (p) (and (= (car p) x) (= (cdr p) y))) sol))) (print '-) (print 'Q)))
(define (iteration x y)
(cond ((= y size) ())
((= x size) (begin (newline) (iteration 0 (+ y 1))))
(else (print-cell x y sol) (iteration (+ x 1) y))))
(iteration 0 0) (newline))
(for-each qprint-aux (queens size)))
;queens
(define (queens bs)
(define (queen-cols k)
(if (< k 0)
(list empty-b)
(filter
(lambda (p) (safe? p))
(accumulate append
null
(map <??>
(queen-cols (- k 1)))))))
(queen-cols (- bs 1)))
;;testcode
;(qprint 4)
;(qprint 5) |
|
|