#lang racket
我需要创建从一个元素的对和列表利弊两个元素输出错误的结果
但是当我做(cons 2 (list 1 2 3))
我得到(2 (1 2 3))
,我想(2 . (1 2 3))
如何获取点在?
#lang racket
我需要创建从一个元素的对和列表利弊两个元素输出错误的结果
但是当我做(cons 2 (list 1 2 3))
我得到(2 (1 2 3))
,我想(2 . (1 2 3))
如何获取点在?
由于(cons a b)
相同(a . b)
我们得到(2 . (1 2 3))
相同(cons 2 (list 1 2 3)
这是一样的(list 2 1 2 3)
。为了证实:
> (cons 2 (list 1 2 3))
'(2 1 2 3)
> '(2 . (1 2 3))
'(2 1 2 3)
注意打印机打印(2 1 2 3)
而不是(2 . (1 2 3))
。只有在绝对需要时,打印机才会尝试使用该点。
解释结构的语法,它的存储方式以及display
将如何表示它。
对于两个元素的列表,有两种方法可以代表它(1)
和(1 .())
。当显示这个列表时,它总是会选择圆括号最少的列表。因此'(2 . (1 2 3))
将始终打印为(2 1 2 3)
,display
。如果你不想,你可以让自己cons-write
,如:
;; displays cons always as dotted
(define (cons-write x)
(if (pair? x)
(begin
(display "(")
(cons-write (car x))
(display " . ") ; spaces are important
(cons-write (cdr x))
(display ")"))
(write x)))
(cons-write '(1 2 3 4)) ; prints (1 . (2 . (3 . (4 .()))))
随着'(2利弊(表1 2 3))'你不明白'(2(1 2 3))' – Sylwester