Извините, если название вопроса немного сбивает с толку. Может быть, после того, как вы ее прочтете, вы сможете предложить мне лучшее название.
В рамках домашнего задания для онлайн-курса я написал итеративную процедуру в mit-scheme
для отображения числа от 1 до заданного числа.
Код ниже работает нормально:
(define (count2-iter num)
(define (iter counter)
(cond ((> counter num) #t)
(else (display counter)
(iter (+ counter 1)))))
(iter 1))
Выход:
1 ]=> (load "count2-iter.scm")
;Loading "count2-iter.scm"... done
;Value: count2-iter
1 ]=> (count2-iter 10)
12345678910
;Value: #t
Лично мне не нравится использовать cond
только для двух веток, и я пытался использовать для этого if
.
(define (count2-iter1 num)
(define (loop idx)
(if (> idx num)
#t
((display idx)
(loop (+ idx 1)))))
(loop 1))
Выход:
1 ]=> (count2-iter1 5)
5
;The object #!unspecific is not applicable.
;To continue, call RESTART with an option number:
; (RESTART 2) => Specify a procedure to use in its place.
; (RESTART 1) => Return to read-eval-print level 1.
Почему это? Разве #t не должен оцениваться так же, как он использовался в cond
? Был бы очень признателен за объяснение, так как я все еще новичок в Scheme.