Scheme中列表的功能是什么?它需要能够处理嵌套列表.
因此,如果你做了类似于(reverse '(a (b c d) e))你(e (b c d) a)的输出.
我该如何处理这个问题?我不只是在寻找答案,而是能帮助我学习的东西.
(define ..
(lambda (start stop)
(cond ((> (add1 start) stop) (quote ()))
((eq? (add1 start) stop) (sub1 stop))
(else (cons start (.. (add1 start) stop))))))
Run Code Online (Sandbox Code Playgroud)
我已经定义了一个简单的范围函数.目的是为了
(.. 1 5) --> (1 2 3 4)
Run Code Online (Sandbox Code Playgroud)
相反,我的元组中添加了一个奇怪的时期,我不明白为什么:
(.. 1 5) --> (1 2 3 . 4)
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样.任何帮助表示赞赏
我是Scheme编程的初学者.我知道Scheme中的点符号用于表示一对符号,例如'(a . b).
第一个元素可以是符号,也可以是列表,无关紧要.但特别是第二个元素必须是一个符号,如果不是,可能是一个列表,那么我们就不能创建一个内置cons过程的对.
那么有可能创建一对2列表??? 好吧,我正在考虑一个解决方案是将列表转换为符号,但实际上这些是完全不同的两件事 - >根据我的理解不可能.
这是我写的代码:
(define compare-attrs
(lambda (attribute1 attribute2)
(if (or (and (null? attribute1) (null? attribute2)) (and (not (null? attribute1)) (not (null? attribute2))))
(cons attribute1 attribute2)
#f)))
Run Code Online (Sandbox Code Playgroud)
其中attribute1和attribute2是2个列表,我的输出是:
attribute1 atrribute2
Run Code Online (Sandbox Code Playgroud)
预期输出:'(attribute1.attribute2)
请解释一下.预先感谢!!!
编辑:添加比较attrs功能的使用
函数compare-attrs用于提取描述实体属性的部分,并将cons它们组成一对,实体定义如下:
(entity e0 (prov:label "entity e0")
(entity e1 (prov:location "London")
Run Code Online (Sandbox Code Playgroud)
所以这些实体的属性是(prov:label "entity e0")和(prov:location "London").当应用函数compare-attrs时,因为这些属性不是null,所以我期望的输出是
`(prov:label "entity e0") . (prov:location "London")`
Run Code Online (Sandbox Code Playgroud)