我正在学习Lisp,我对Lisp编程没有经验.在我的部分学习中,我遇到了以下例子:
> (cons ‘a ‘(a b)) ----> (A A B)
> (cons ‘(a b) ‘a) ----> ((A B).A)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么当我们(cons'a'(ab))时,响应是(AAB),为什么当我们稍微改变它并把'a after (ab)时,响应是一个虚线列表就像((AB) ).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的新手,在这里我遇到了虚线列表的问题,这是一个例子:
(define (f x . y) (cons x y))
当我输入时: (f 1 2 3)结果是'(1 2 3)。是的,它返回一个列表,此时
x => 1和y => '(2 3)。
我的问题是,当f采用不固定长度的 args时,解释器如何知道这一点?
对于我的编程语言课程,我应该在 Scheme 中编写一个函数来反转列表,而不使用预制的反转函数。到目前为止我得到的是
(define (reverseList lst)
(COND
((NULL? lst) '())
(ELSE (CONS (reverseList(CDR lst)) (CAR lst)))
))
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,如果我输入一个列表,可以说它(a b c)给了我(((() . c) . b) . a).
我该如何获得一个没有多组括号和 的干净列表.?
我需要使用常见的lisp创建一对内部包含两对.
输出需要是:
((1 . 2) . (3 . 4))
文献状态(cons (cons 1 2) (cons 3 4))应该输出我需要的东西,但是当我运行时,我得到:
((1 . 2) 3 . 4)
任何帮助表示赞赏.
开始学习计划,我遇到了这个:
有什么区别
("v" . 1)
Run Code Online (Sandbox Code Playgroud)
和
("v" 1)
Run Code Online (Sandbox Code Playgroud)
他们似乎工作相同,只是想知道有什么区别.我倾向于使用("v" 1),但( cons "v" 1 )返回("v" . 1).那么,有什么区别?
谢谢
我已经尝试了各种各样的缺点组合并附加产生'(5.(5))但我不能.有什么办法吗?