Scheme - 控制台输出如何确定? (DrRacket)

时间:2016-09-15 11:46:27

标签: scheme racket

我对Scheme很新,我目前正在使用DrRacket作为我的IDE。

如果我有一个小程序,例如 - 一个给定数字的程序,将生成一个从0到该数字的列表:

(define (helper num mylist)
  (cond [(zero? num) (append (list 0) mylist)]
        [else (helper (- num 1) (append (list num) mylist))]))
(define (genlist num)
  (helper num '()))
  

(genlist 10)=> '(0 1 2 3 4 5 6 7 8 9 10)

我来自Java背景,这里显然没有print声明。那么它如何“决定”将mylist输出到控制台?什么“告诉”它这样做?

谢谢!

2 个答案:

答案 0 :(得分:2)

genlist不打印列表,只返回它。它是打印它的REPL,因为它打印了你输入的任何表达式的返回值。

它还会打印在加载文件时在文件顶层写入的任何非void表达式的值。

答案 1 :(得分:1)

解释器(REPL)始终打印您输入的表达式的值。

如果我们定义

(define (foo a)
  (display a)
  a)

(define (bar a)
  (display a))

我们得到输出

> (bar "hello")
hello
> (foo "hello")
hello"hello"

其中hello s(不带引号)由过程输出,然后REPL打印过程调用的结果,这对于第一个没有任何内容,而"hello"为第二个。
在DrRacket中,输出也有不同的颜色。

(另请注意,作为值的字符串的打印方式与作为过程输出的字符串不同。)