我看到了关于圆点的other questions。我跟着但这对我的代码无效..。它是代码的一部分,实现没有聚焦于这个符号。但是输出应该包括这个点。当我输入两个列表‘(12.3)’(4.5)时,我的预期输出=> (1 )。( 4) (2 )5)
我设法得到(14) (2 )只需要添加“。在中间。
Part of mycode
(cons (list (car lst1) (car lst2))
....为了“。”符号,如果我尝试
**trial-1**
(cons '(list (car lst1) (car lst2)) ...)然后输出:((list (car lst1) (car Lst2)
**trail-2**
(cons (list (car lst1) '. (car lst2)) ...)然后..。它说:非法使用“。
使用圆点的规则是什么?有什么文件我可以看吗?顺便说一句,我用的是球拍(R5RS)。
发布于 2014-05-12 23:08:38
当您构建cons-pair或不合适的列表(意思是:它不会以空列表结尾)时,就会显示点符号。例如:
(cons 1 2)
=> (1 . 2) ; a cons-pair
(cons 1 (cons 2 (cons 3 4)))
=> '(1 2 3 . 4) ; an improper list例如,要显示如问题中所示的输出,请尝试如下:
(define lst1 '(1 2 3))
(define lst2 '(4 5))
(list (cons (car lst1) (car lst2))
(cons (cadr lst1) (cadr lst2)))
=> '((1 . 4) (2 . 5))发布于 2014-05-12 23:35:19
虽然.可以是符号的一部分,但.本身并不是一个有效的符号。.在list结构中用作car和cdr之间的分隔符。例如:(a . (b . (c . ()))) ; ==> (a b c)。
实际应用程序是在过程原型中作为rest参数的历史性使用,您可以使用它作为模板、宏的转换。此外,read可以读取它,您也可以使用它作为(define lst '((a) . (b)))之类的数据。
因此,概括地说:
(a . b)是一对a和b,而(a.b)与(a.b . ())相同,因此是符号a.b和空列表的一对。
至于如何创建一对,您可以使用cons。(cons 'a 'b) => (a . b)和(list a b) => (cons 'a (cons b '()))。现在您可以用两个列表作为参数,(cons '(1 4) '(2 5)),但是如果打印它,您就知道(a . (b))和(a b)是一样的,因此(cons '(1 4) '(2 5))将显示为((1 4) 2 5),因为它不喜欢显示点。如果它更喜欢显示点,它就会将它显示为((1 . (4 . ())) . ((2 . (5 . ())))),因为这就是数据结构中有多少对。
如果您已经成功地获得了输出((1 4) (2 5)),并且真的想要((1 . 4) (2 . 5)),那么您需要用cons替换list。
发布于 2014-05-12 23:07:40
它被称为虚线对,当您使用非列表进行cons时会产生它,如:
> (cons 1 2)
(1 . 2)请参阅:Syntax.html
https://stackoverflow.com/questions/23620331
复制相似问题