Scheme中的手动函数调用

时间:2015-10-20 22:51:30

标签: scheme

(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

如果不正确,我做错了什么?

1 个答案:

答案 0 :(得分:0)

这个程序在DrRacket的步进器中工作正常。启动DrRacket,将语言级别设置为“使用Lambda中级”,将程序(以及对legal?的调用)放入缓冲区,然后单击“步骤”按钮。这应该一次一个地显示程序的步骤。 (有超过4个步骤。)

如果您对此有任何疑问,请告诉我。