Scheme 手动功能调用方案
我正在尝试遍历上面的函数。这是我的一个人工电话。请查看以下内容是否正确:Scheme 手动功能调用方案,scheme,Scheme,我正在尝试遍历上面的函数。这是我的一个人工电话。请查看以下内容是否正确: (define legal? (lambda (try legal-pl) (letrec ((good? (lambda (new-pl up down) (cond ((null? new-pl) #t) (else (let ((next-pos (car
(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)))))
如果不正确,我做错了什么 该程序在DrRacket的步进器中运行良好。启动DrRacket,将语言级别设置为“中间带Lambda”,将您的程序(以及对
legal?
)的调用)放入缓冲区,然后单击“步骤”按钮。这将向您显示程序的步骤,一次一个。(有相当多的4个步骤。)
如果您对此有任何问题,请告诉我。@John,谢谢您的回答。我按照你说的做了,但是得到了“所有的定义都已成功评估”。未显示任何步骤。@user134627您是否“将调用
(legal?3'(14 8))
作为缓冲区中的最后一行,然后单击“步骤”按钮”?@Will Ness,我忘了这么做。非常感谢你!另外,我非常高兴@John建议DrRacket。非常方便,非常棒。@user134627通知不能在@
之后使用该空间。那里不能有任何空间。干杯。:)不客气。
(legal? 3 '(1 4 8))
(good? '(1 4 8) 4 2)
(good? '(4 8) 5 1)
(good? '(8) 6 0)
(good? '() 7 -1)
#t