相关疑难解决方法(0)

"Cons"如何在Lisp中运行?

我正在学习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)?第一个代码行和第二个代码行有什么区别?这些代码背后发生了什么?

lisp common-lisp cons

11
推荐指数
3
解决办法
3747
查看次数

Lisp中的递归范围增加了一个时期?

(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)

我不明白为什么会这样.任何帮助表示赞赏

lisp scheme

5
推荐指数
1
解决办法
1937
查看次数

在Scheme中,我如何理解“(define (fx . y) (cons xy))”

我是Scheme的新手,在这里我遇到了虚线列表的问题,这是一个例子:

(define (f x . y) (cons x y))

当我输入时: (f 1 2 3)结果是'(1 2 3)。是的,它返回一个列表,此时

x => 1y => '(2 3)

我的问题是,当f采用不固定长度的 args时,解释器如何知道这一点?

lisp scheme functional-programming

3
推荐指数
1
解决办法
348
查看次数

反转列表的方案函数

对于我的编程语言课程,我应该在 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).

我该如何获得一个没有多组括号和 的干净列表.

scheme reverse list

1
推荐指数
1
解决办法
7295
查看次数

使用常见的lisp创建一对对

我需要使用常见的lisp创建一对内部包含两对.

输出需要是: ((1 . 2) . (3 . 4))

文献状态(cons (cons 1 2) (cons 3 4))应该输出我需要的东西,但是当我运行时,我得到:
((1 . 2) 3 . 4)

任何帮助表示赞赏.

common-lisp cons

1
推荐指数
1
解决办法
428
查看次数

("v"1)和("v".1)之间的差异

开始学习计划,我遇到了这个:

有什么区别

("v" . 1)
Run Code Online (Sandbox Code Playgroud)

("v" 1)
Run Code Online (Sandbox Code Playgroud)

他们似乎工作相同,只是想知道有什么区别.我倾向于使用("v" 1),但( cons "v" 1 )返回("v" . 1).那么,有什么区别?

谢谢

scheme

1
推荐指数
1
解决办法
33
查看次数

方案:如何制作'(5.(5))

我已经尝试了各种各样的缺点组合并附加产生'(5.(5))但我不能.有什么办法吗?

scheme append cons racket

0
推荐指数
1
解决办法
75
查看次数