2015-10-20 4 views
0
(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

Эта программа отлично работает в шаге DrRacket. Запустите DrRacket, установите уровень языка на «Промежуточное соединение с лямбдой», поместите свою программу (и звонок в legal?) в буфер и нажмите кнопку «Шаг». Это должно показать вам шаги программы, по одному за раз. (Есть намного больше 4 шагов.)

Сообщите мне, если у вас есть проблемы с этим.

+0

@ John, спасибо, что ответили. Я сделал, как вы сказали, но получил: «Все определения были успешно оценены». Никаких шагов не показано. – user134627

+0

@ user134627 Вы «поместили вызов» (legal? 3 '(1 4 8)) 'в качестве последней строки в вашем буфере и нажмите кнопку« step »? –

+1

@ Уилл Несс, я забыл сделать именно это. Большое спасибо! Кроме того, я супер счастлив @ Джон предложил DrRacket. Очень удобно и удивительно. – user134627

Смежные вопросы