(define legal?
(lambda (try legal-pl)
(letrec
((good?
(lambda (new-pl up down)
(cond
((null? new-pl) #t)
(else
(let ((next-pos (car new-pl)))
(and
(not (= next-pos try))
(not (= next-pos up))
(not (= next-pos down))
(good? (cdr new-pl)
(add1 up)
(sub1 down)))))))))
(good? legal-pl (add1 try) (sub1 try)))))
我正试图通过上面的功能。这是我做的手动电话。请查看是否正确:
(legal? 3 '(1 4 8))
(good? '(1 4 8) 4 2)
(good? '(4 8) 5 1)
(good? '(8) 6 0)
(good? '() 7 -1)
#t
如果不正确,我做错了什么?
答案 0 :(得分:0)
这个程序在DrRacket的步进器中工作正常。启动DrRacket,将语言级别设置为“使用Lambda中级”,将程序(以及对legal?
的调用)放入缓冲区,然后单击“步骤”按钮。这应该一次一个地显示程序的步骤。 (有超过4个步骤。)
如果您对此有任何疑问,请告诉我。