球拍 - Peg Solitaire无法达成解决方案

时间:2014-11-30 21:05:08

标签: racket

我遇到了必须编写的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,但我似乎无法弄清楚错误是什么。如果您需要任何额外信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

你需要找出问题所在。

我建议您插入显示以查看算法的进展情况:

(define (solitaire board state solution)
  (begin
    (display (list board state solution))
    (newline)
    (find-route state (make-neighbours board) (make-solved? solution))))

然后研究输出。您想要找到算法卡住的状态。