我遇到了必须编写的Racket程序的问题。我们正在使用Lambda语言的中级学生,并且可以使用其中包含的任何内容。我的任务是制作一种Peg Solitaire形式,一旦程序找出解决方案,就会以幻灯片形式显示解决方案(此代码在说明中给出)。我的问题是我的程序似乎无休止地循环,或者它只是无法找到基于主板的解决方案的途径。我们在合同中获得了(find-route initial-state neighbours solved?)
函数:
find-route: X (X -> (listof X)) (X -> Bool) -> (anyof false (listof X))
它将产生一系列状态直到解决方案。
我正在使用此功能调用它:
(define (solitaire board state solution)
(find-route state (make-neighbours board) (make-solved? solution)))
make-neighbours
是一个在给定状态下产生每一个可能移动的工作函数(我已经广泛地测试了这个函数,它似乎不是问题,但它很长,所以我我犹豫要复制/粘贴它)。此外,make-solved?
也是一个工作函数,它生成一个函数,用于确定给定状态是否为解决方案。
我认为问题出在solitaire
,但我似乎无法弄清楚错误是什么。如果您需要任何额外信息,请告诉我。
答案 0 :(得分:0)
你需要找出问题所在。
我建议您插入显示以查看算法的进展情况:
(define (solitaire board state solution)
(begin
(display (list board state solution))
(newline)
(find-route state (make-neighbours board) (make-solved? solution))))
然后研究输出。您想要找到算法卡住的状态。