Я изучаю Berkeley CS61A, используя Scheme. Функция pigl
используется для представления рекурсии, и пример кода выглядит следующим образом:
(define (pigl wd)
(if (pl-done? wd)
(word wd 'ay)
(pigl (word (bf wd) (first wd))) ) )
Я попытался изменить выражение if
на cond
, модифицированный код выглядит следующим образом
(define (pigl2 wd)
(cond ((pl-done? wd) (word wd 'ay))
(else pigl2 (word (bf wd) (first wd))) ) )
Исходя из моего понимания интерпретации if
и cond
в SICP, я думаю, что эти две процедуры должны быть эквивалентны. Однако pigl2
не сработало, потому что он дал 'ab
для ввода 'ba
, и правильный ответ - abay
.
Я не знаю, неправильно ли я понял правила оценки if
и cond
или если я допустил другие глупые ошибки. Пожалуйста, помогите мне, спасибо!