首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“关于点”。在方案中

“关于点”。在方案中
EN

Stack Overflow用户
提问于 2014-05-12 23:03:02
回答 4查看 6.9K关注 0票数 4

我看到了关于圆点的other questions。我跟着但这对我的代码无效..。它是代码的一部分,实现没有聚焦于这个符号。但是输出应该包括这个点。当我输入两个列表‘(12.3)’(4.5)时,我的预期输出=> (1 )。( 4) (2 )5)

我设法得到(14) (2 )只需要添加“。在中间。

代码语言:javascript
复制
Part of mycode 
(cons (list (car lst1) (car lst2))
....

为了“。”符号,如果我尝试

代码语言:javascript
复制
**trial-1**
 (cons '(list (car lst1) (car lst2)) ...)

然后输出:((list (car lst1) (car Lst2)

代码语言:javascript
复制
**trail-2**
(cons (list (car lst1) '. (car lst2)) ...)

然后..。它说:非法使用“。

使用圆点的规则是什么?有什么文件我可以看吗?顺便说一句,我用的是球拍(R5RS)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-12 23:08:38

当您构建cons-pair或不合适的列表(意思是:它不会以空列表结尾)时,就会显示点符号。例如:

代码语言:javascript
复制
(cons 1 2) 
=> (1 . 2) ; a cons-pair

(cons 1 (cons 2 (cons 3 4)))
=> '(1 2 3 . 4) ; an improper list

例如,要显示如问题中所示的输出,请尝试如下:

代码语言:javascript
复制
(define lst1 '(1 2 3))
(define lst2 '(4 5))

(list (cons (car lst1) (car lst2))
      (cons (cadr lst1) (cadr lst2)))

=> '((1 . 4) (2 . 5))
票数 7
EN

Stack Overflow用户

发布于 2014-05-12 23:35:19

虽然.可以是符号的一部分,但.本身并不是一个有效的符号。.在list结构中用作carcdr之间的分隔符。例如:(a . (b . (c . ()))) ; ==> (a b c)

实际应用程序是在过程原型中作为rest参数的历史性使用,您可以使用它作为模板、宏的转换。此外,read可以读取它,您也可以使用它作为(define lst '((a) . (b)))之类的数据。

因此,概括地说:

(a . b)是一对ab,而(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

票数 3
EN

Stack Overflow用户

发布于 2014-05-12 23:07:40

它被称为虚线对,当您使用非列表进行cons时会产生它,如:

代码语言:javascript
复制
> (cons 1 2)
(1 . 2)

请参阅:Syntax.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23620331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档