Процедури 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 да бъде стандартна процедура от Scheme? Тъй като много кодове в интернет показват така и няма описание на процедурата за „показване“. Същото се случва с READ/READ-LINE и т.н.

Благодаря!


person user1060551    schedule 13.02.2013    source източник
comment
Наистина не харесвам схемата pokemons^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
Цитат от тази глава: Всъщност шоуто не е официален примитив на схемата; ние го написахме по отношение на показване и нов ред.   -  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 това е много, много субективен въпрос и зависи от това какво разбирате под пълно. За учебни цели харесвам DrRacket. - person Óscar López; 14.02.2013

Името на пилето за show е print. Ако направите (define show print), можете да използвате и двете имена

person Sandra    schedule 23.08.2016