我看到有other questions关于点"。" 我跟着但它没有为我的代码工作.... 它是代码的一部分,实现并不专注于此符号。 但输出应该包括在这个点。 当我输入两个列表'(1 2 3)'(4 5) 我的预期输出=> (1.4)(2.5)
我设法得到(1 4)(2 5) 只需要添加"。"在中间。
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)) ...)
然后..它说:非法使用`。'
使用点的规则是什么?我能看到的任何文件? 顺便说一下,我正在使用Racket(R5RS)。
答案 0 :(得分:2)
当您构建{emis 时,会显示点符号(意思是:它不以空列表结束)。例如:
cons
例如,要显示问题中显示的输出,请尝试以下方法:
(cons 1 2)
=> (1 . 2) ; a cons-pair
(cons 1 (cons 2 (cons 3 4)))
=> '(1 2 3 . 4) ; an improper list
答案 1 :(得分:2)
虽然.
可以是符号的一部分,但.
本身并不是有效符号。 .
在列表结构中用作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}}因为它不希望显示点。如果它更喜欢显示点,它会显示为((1 4) 2 5)
,因为那个数据结构中有多少对。
如果您设法获得输出((1 . (4 . ())) . ((2 . (5 . ()))))
并且真的需要((1 4) (2 5))
,则需要将((1 . 4) (2 . 5))
替换为list
。
答案 2 :(得分:1)
它被称为虚线对,当您cons
具有非列表的项目时生成,例如:
> (cons 1 2)
(1 . 2)
请参阅:http://download.plt-scheme.org/doc/html/guide/Pairs__Lists__and_Scheme_Syntax.html
答案 3 :(得分:1)
来自R7RS:
Scheme对的最一般表示法(外部表示) 是“虚线”符号(c1.c2),其中c1是汽车的价值 field和c2是cdr字段的值。例如(4.5)是a 汽车为4且cdr为5的对。注意(4.5)是 一对的外部表示,而不是一个评估的表达式 一对。
.
不是符号。