Scheme 方案函数定义

Scheme 方案函数定义,scheme,lisp,mit-scheme,Scheme,Lisp,Mit Scheme,我在业余时间一直在读《小阴谋家》,试图尝试语法,但我遇到了一个语法问题,我无法理解。我有一个脚本如下所示: ;;;; Chapter 2 examples ;;; Note: run this file with 'mit-scheme --quiet < c2.scm' ;; You can define variables using the "define" function (define my-favorite-number 13) ;; You can define str

我在业余时间一直在读《小阴谋家》,试图尝试语法,但我遇到了一个语法问题,我无法理解。我有一个脚本如下所示:

;;;; Chapter 2 examples
;;; Note: run this file with 'mit-scheme --quiet < c2.scm'

;; You can define variables using the "define" function
(define my-favorite-number 13)

;; You can define strings using double-quotes
(define my-favorite-color "green")

;; you define functions with lambdas.  Functions auto return their last line
(define my-favorites
  (lambda (color number)
    (string-append "My favorite color is " color " and my favorite number is " number)))

; display will print
(display
 (my-favorites my-favorite-color (number->string my-favorite-number)))

; and newline prints a newline
(newline)
运行此文件时,我似乎无法打印“Hello,World”。第一个显示效果很好,但第二个没有任何作用,我无法解释原因。起初我认为这可能与scheme在交互环境中的正常运行方式有关,所以我去掉了第一块代码,但仍然没有发生任何事情

如果我在交互式会话中加载文件,“greet”功能工作得很好,因此我认为这一定是显示功能的一些奇怪之处

有人能解释为什么我的第一个显示器能工作,而我的第二个不能


我想试试这是一个不同的环境。我不知道这个方案,但这两个例子看起来相当相似。可能重新启动REPL或运行此命令的任何程序。
c2.scm的输出是
“我最喜欢的颜色是绿色,我最喜欢的数字是13\nHello,World”
在猜测中运行时:尝试在文件末尾调用
(刷新输出端口)
。@RainerJoswig该函数为我提供了一个“未绑定变量:刷新输出端口”错误,但它确实导致了最后一个“hello,world”的打印,因此我尝试了一些奇怪的方法,并在文件末尾添加了一个
(新行)
,现在它的行为与预期的一样。我想在
新行
显示
之间可能有一些我不理解的交互作用。您可能想检查您使用的是哪个版本的MIT方案。刷新输出端口也有类似的功能-请查看所用版本的手册。输出流可以被缓冲。newline可能只调用类似于flush输出端口的东西,以确保强制传递缓冲输出。
(define greet
  (lambda (name)
    (string-append "Hello, " name)))

(display (greet "World"))