小编jos*_*ess的帖子

Lisp程序,用于创建每个增量的子列表

我目前正在开发一个程序,该程序通过列表递增,并在每次递增时在列表中创建子列表.例如,如果我有一个列表

(1 2 3 4 5 6)
Run Code Online (Sandbox Code Playgroud)

.然后我想通过它增加并创建

(1 (2 (3 (4 (5 (6))))))
Run Code Online (Sandbox Code Playgroud)

.到目前为止,我有:

(defun INCREMENT (L) (unless (endp L) (cons (list (first L)) (INC (rest L)))))
Run Code Online (Sandbox Code Playgroud)

但这一切都将归来

((1) (2) (3) (4))
Run Code Online (Sandbox Code Playgroud)

我知道它只是递增列表的使用次数以及遍历列表的元素,但我仍然在学习Lisp的语法.有人可以帮我解决这个问题吗?

lisp syntax list common-lisp sublist

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

Lisp程序使用整数列表复制列表的元素

我正在开发一个程序,它接受一个元素列表,并根据第二个整数列表中包含的整数复制每个单独的元素.例如,如果我有一个列表

(A B C D)
Run Code Online (Sandbox Code Playgroud)

被复制:

(1 5 4 2)
Run Code Online (Sandbox Code Playgroud)

我会

(A B B B B B C C C C D D)
Run Code Online (Sandbox Code Playgroud)

到目前为止我有

(defun COPY (X Y) 
  (if (zerop Y) 
      nil 
      (cons S (COPY X (1 - Y)))))
Run Code Online (Sandbox Code Playgroud)

当然,这只是单个元素重复一次.有人知道如何解决这个问题吗?

lisp syntax list common-lisp duplicates

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

Lisp递归mergesort与升序?

我目前正在尝试编写一个程序,该程序将两个数字列表假定为已按升序排列并以递归方式合并它们.

到目前为止,我有:

(defun MERGESORT (NLIST1 NLIST2)
(cond ((null NLIST1)NLIST2)
((null NLIST2)NLIST1)
((<= (car NLIST1) (car NLIST2)) (cons(car NLIST1)(car Nlist2))
(MERGESORT(cdr NLIST1)(cdr NLIST2)))
(t(cons(car NLIST2)(car NLIST1))
(MERGESORT (cdr NLIST1)(cdr NLIST2)))))
Run Code Online (Sandbox Code Playgroud)

当我将功能写入控制台时

(write (MERGESORT '(1 1 2 4 7) '(1 2 2 3 4 6 9)))
Run Code Online (Sandbox Code Playgroud)

我似乎输出的所有是(6 9)

我想得到(1 1 1 2 2 2 3 4 4 6 7 9).

我可能会稍微过度思考条件,我知道这只是比较前两个元素的问题,首先输出两个元素中较小的一个然后递归,但现在我处于障碍中.你们怎么做这个程序?

lisp syntax mergesort list common-lisp

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

标签 统计

common-lisp ×3

lisp ×3

list ×3

syntax ×3

duplicates ×1

mergesort ×1

sublist ×1