[英]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.