0

我尝试了各种 cons 和 append 的组合来产生 '(5 . (5)) 但我做不到。有什么办法吗?

4

2 回答 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 回答