Процедуры SHOW/READ/READ-LINE/etc на схеме

Я изучаю Scheme и использую несколько примеров, чтобы увидеть, как это работает.

Я использую интерпретатор Chicken с Eclipse.

При попытке запустить следующий код:

(define (bottles n)
  (if (= n 0)
      'burp
      (begin (verse n)
         (bottles (- n 1)))))

(define (verse n)
  (show (cons n '(bottles of beer on the wall)))
  (show (cons n '(bottles of beer)))
  (show '(if one of those bottles should happen to fall))
  (show (cons (- n 1) '(bottles of beer on the wall)))
  (show '()))

(bottles 3)

И я получаю следующую ошибку:

#;1> #;2>  Note: the following toplevel variables are referenced but unbound:

  verse (in bottles)
#;3> #;3>  Note: the following toplevel variables are referenced but unbound:

  show (in verse)   show (in verse)   show (in verse)   show (in verse)   show (in verse)

Error: unbound variable: show

Call history:

<syntax>      (bottles 3)   <eval>    (bottles 3)   <eval>    [bottles] (= n 0)     <eval>    [bottles] (verse n)   <eval>    [verse] (show (cons n (quote (bottles of beer on the wall)))) <--

Кто-нибудь знает, почему? Конечно, если я создам процедуру, которая говорит, что "show" будет отображать информацию, тогда она будет работать, но должна ли SHOW быть стандартной процедурой из Scheme? Потому что многие коды в Интернете показывают подобное, и нет описания процедуры «показа». То же самое происходит с READ/READ-LINE и т. д.

Спасибо!


person user1060551    schedule 13.02.2013    source источник
comment
Я не особо увлекаюсь схемой покемонов^W, но было ли это display вместо show?   -  person Anton Kovalenko    schedule 13.02.2013
comment
Нет, я взял этот пример отсюда: eecs.berkeley.edu/~bh /ssch20/io.html   -  person user1060551    schedule 14.02.2013
comment
Цитата из этой главы: На самом деле show не является официальным примитивом Scheme; мы написали это с точки зрения отображения и новой строки.   -  person Anton Kovalenko    schedule 14.02.2013


Ответы (2)


Процедура show не определена. Как часть R5RS, реализованной в Chicken Scheme, вы можете использовать display или write для вывода, как показано в документация.

Однако функциональность show может быть легко реализована:

(define (show obj)
  (display obj)
  (newline))
person Óscar López    schedule 13.02.2013
comment
Какой самый полный интерпретатор Scheme? - person user1060551; 14.02.2013
comment
@user1060551 user1060551 это очень, очень субъективный вопрос, и он зависит от того, что вы понимаете под полным. В учебных целях мне нравится DrRacket. - person Óscar López; 14.02.2013

Цыпленка для show зовут print. Если вы делаете (define show print), вы можете использовать любое имя

person Sandra    schedule 23.08.2016