【问题标题】:Sublist in Lisp [closed]Lisp中的子列表[关闭]
【发布时间】:2021-02-05 22:19:21
【问题描述】:

我无法在 lisp 中创建子列表。我的任务是编写一个函数,它接受一个列表和两个索引 from 和 to,并返回“子列表”,其元素是 from 和 to 索引中的元素。我只被允许使用函数 cdr、car、cons、list 和 append。这是代码输出的示例。

子列表'(1 6 12) 2 3) 输出:(6 12)

【问题讨论】:

  • "我在 lisp 中创建子列表时遇到了问题。" -- 到目前为止你尝试过什么?

标签: loops recursion indexing lisp sublist


【解决方案1】:

提示:

(sublist '(1 6 12 15) 2 3)

结果与

相同
(sublist '(6 12 15) 1 2)

当 start index 达到 1 时,可以在 consing 元素时检查 end 的值;也要小心空列表。前面的表达式可以改写:

(cons 6 (sublist '(12 15) 1 1))

(cons 6 (cons 12 (sublist '(15) 1 0)))

终于

(cons 6 (cons 12 nil))

更准确地说,这里是执行的痕迹:

USER> (sub '(1 2 3 4 5) 2 4)
  0: (SUB (1 2 3 4 5) 2 4)
    1: (SUB (2 3 4 5) 1 3)
      2: (SUB (3 4 5) 1 2)
        3: (SUB (4 5) 1 1)
          4: (SUB (5) 1 0)
          4: SUB returned NIL
        3: SUB returned (4)
      2: SUB returned (3 4)
    1: SUB returned (2 3 4)
  0: SUB returned (2 3 4)
(2 3 4)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多