簡體   English   中英

如何使用方案 r5rs 語言將以下內容打印到控制台

[英]How to print the folowing to console in scheme r5rs language

(define x '())
x

在 repl 控制台中給出 => '()

(define x '())
(display x)

給出 => ()但我想像'()一樣打印它

如何使顯示打印'()而不是()

我需要這個,因為我的函數正在記錄用戶提供的錯誤輸入的錯誤,並且我只想將'()輸入打印為'() ,有點像運行以下命令時的方案:

(define x '())
(cdr x)

給 =>

mcdr: contract violation
  expected: mpair?
  given: '() (Note the ')

編碼:

(define x '())
(define y '(1 . 2))
x ; ==> ()
y ; ==> (1 . 2)

因此,在 Scheme REPL 中評估x將顯示()因為當您評估'()它評估的是沒有第一個'的東西。

球拍怪癖

在 Racket 中,他們可以配置 REPL 如何在 REPL/交互窗口中打印值。 #lang racket當您使用display您將看到真正的價值

(display x) ; prints ()
(display y) ; prints (1 . 2)

但是在$lang r5rs中,默認設置輸出設置的默認 REPL 是print

x ; ==> '()
y ; ==> (mcons 1 2)

使用constructor作為輸出樣式:

x ; ==> empty
y ; ==> (cons 1 2)

使用quasiquote作為輸出樣式:

x ; ==> `()
y ; ==> `(1 . 2)

以上所有內容並沒有真正打印出價值。 它以選定的樣式打印一個表達式,在評估時將變為相同的值。 '()empty`()都計算為()因此所有這些都打印為您在計算'()時獲得的值

唯一明智的選擇是使用write作為輸出樣式。 這將以與所有其他方案實現相同的方式在 REPL 中打印實際值:

x ; ==> ()
y ; ==> (1 . 2)
 (format "'%s" '())

scheme ia中的輸出語法和輸入語法不一樣,需要自己創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM