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