【发布时间】:2012-09-11 06:14:47
【问题描述】:
程序是生成八个皇后的所有可能结果。 我使用包含行号的列表作为数据结构。 但是当我运行它时,我得到了错误的结果。 这是我的代码:
(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))
【问题讨论】:
-
尝试先评论您的代码。我怀疑很多人有时间尝试了解您想要做什么。既然有错误,你甚至可能会发现它!
-
你得到了什么,你期望得到什么?
-
堆栈溢出通常不赞成人们简单地上传代码并说它会产生“错误的结果”。什么样的错误结果?代码的哪一部分被破坏了?等等。考虑编辑您的问题,并在发布问题之前阅读 stackoverflow 为您提供的页面。
标签: lisp scheme sicp mit-scheme