2016-09-15 61 views
2

我對Scheme很新,我目前使用DrRacket作爲我的IDE。方案 - 如何確定控制檯輸出? (DrRacket)

如果我有一個小程序,例如 - 這是給定數目的程序,將產生從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

genlist不打印列表,它只返回它。這是REPL打印它,因爲它打印您輸入的任何表達式的返回值。

它還會打印在加載時寫入文件頂層的任何非無效表達式的值。

+0

哦好吧,更有意義,現在..謝謝! – Gambit2007

+0

@ Gambit2007也注意到,這種頂級槓桿打印特別適用於'#lang racket',並且只有在進入repl時,'#!r6rs'頂層程序纔會打印任何未明確打印的內容。您也有[Java repl](http://www.javarepl.com/console.html) – Sylwester

+0

好的,謝謝,我會牢記這一點!到目前爲止,它看起來像我將只使用'#朗拍# – Gambit2007

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中,輸出也具有不同的顏色。

(另請注意,一個字符串,是一個值從一個字符串,它是一個過程的輸出打印不同。)

+0

感謝您的答案! – Gambit2007