我尝试了各种 cons 和 append 的组合来产生 '(5 . (5)) 但我做不到。有什么办法吗?
问问题
82 次
2 回答
7
冒着听起来像比尔克林顿的风险,这取决于你所说的“生产”是什么意思。
如果您的意思是“生成一个在屏幕上打印为 的值'(5 . (5))
,那么您有点不走运,因为该值打印为'(5 5)
.
对于类似的示例:我如何生成数字1e-1
?好吧,试着输入它;这与 0.1 相同,如果您输入 1e-1,它将打印为 0.1。
但是,您可以评估
#lang racket
(= 0.1 1e-1)
...您会发现它们是相同的数字。
以同样的方式,尝试评估
#lang racket
(equal? '(5 . (5)) (list 5 5))
你会看到这是写相同值的两种方式。
于 2015-11-30T19:52:36.257 回答
1
没有可移植的方法来不正确地打印正确的列表。最简单的方法是编写自己的打印机。一个非常简单的方法如下所示:
(define (write-dot obj . maybe-port)
(define out (if (null? maybe-port) (current-output-port) (car maybe-port)))
(cond ((pair? obj)
(display "(" out)
(write-dot (car obj) out)
(let loop ((obj (cdr obj)))
(display " " out)
(cond ((null? obj))
((and (pair? obj) (null? (cdr obj)))
(display ". " out)
(write obj out))
((pair? obj) (write-dot (car obj)) (loop (cdr obj)))
(else (write obj)))
(display ")" out)))
(else (write obj out))))
于 2015-11-30T10:57:34.103 回答