該程序是生成八個皇后的所有可能的結果。 我使用包含行號的列表作爲數據結構。 但是當我運行它時,我得到了錯誤的結果。 這是我的代碼:SICP 2.42八皇后。幫助檢查我的代碼有什麼問題?
(define (queens board-size)
(define (safe? k position)
(define (iter last-element front-lst col-num k)
(define (ok? l-e car-lst)
(and (not (= l-e car-lst))
(not (= (abs (- l-e car-lst)) (abs (- k col-num))))))
(if (null? front-lst)
true
(and (ok? last-element (car front-lst))
(iter last-element (cdr front-lst) (++ col-num) k))))
(let ((l-e (car (my-reverse position)))
(f-l (my-remove (car (my-reverse position)) position)))
(iter l-e f-l 1 k)))
(define empty-board nil)
(define (adjoin-position new-row k rest-of-queens)
(append rest-of-queens (list new-row)))
(define (queen-cols k)
(if (= k 0)
(list empty-board)
(filter
(lambda (positions) (safe? k positions))
(my-flatmap
(lambda (rest-of-queens)
(map (lambda (new-row)
(adjoin-position new-row k rest-of-queens))
(enumerate-interval 1 board-size)))
(queen-cols (-- k))))))
(queen-cols board-size))
先嚐試評論你的代碼。我懷疑很多人有時間去嘗試理解你想做什麼。而且由於有一個bug,你甚至可能會發現它! – Axioplase
什麼是'++'和'--'? – soegaard
你得到了什麼,你期望得到什麼? –