Scheme 控制台输出是如何确定的

Scheme 控制台输出是如何确定的,scheme,racket,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 '()))

我是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)=>'(01 2 3 4 5 6 7 8 9 10)


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

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

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

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

如果我们定义

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

(define (bar a)
  (display a))
我们得到了输出

> (bar "hello")
hello
> (foo "hello")
hello"hello"
其中,过程输出
hello
s(不带引号),然后REPL打印过程调用的结果,第一个调用的结果为零,第二个调用的结果为
“hello”

在DrRacket中,输出也有不同的颜色


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

@Gambit2007还请注意,这种顶杆打印方式专门用于
#lang racket
#!r6rs
顶级程序不会打印任何在运行时未明确打印的内容,只有在repl中输入时才会打印。你没问题,谢谢,我会记住的!到目前为止,我似乎只使用了
#lang racket
谢谢你的回答!