0

在过去的课程中简要介绍了 LISP 之后,我决定先跳起来尝试学习CLISP(阅读Seibel 的 PCL chpt 5)。我的问题是关于编写一个将一组列表作为参数的函数。第一个列表是映射到第二个列表的一系列索引。我想传递一系列索引并让它返回相应的元素。

到目前为止,这是我的代码大纲。我不确定是否可以使用 nth 并将参数列表传递给它。我不确定身体形态应该是什么样子。

系统信息:CLISP 2.49 Win7

(defun get-elements('(nth (x y z) '(a b c)) )  
  "takes a list of arguments that returns corresponding elements from a list."
  (format t "The elements at index ~d are: ~%" x y z)
  ((maybe indexes go here)'(elements go here?)) 

列表(x y z)是索引,数据列表(a b c)是任意元素的列表。评估作为数据传递给函数 get-elements。我的这种思路是否走在了正确的轨道上?

非常感谢 LISP 教育中相关主题的提示和指针。

事后分析:在重新检查 chpts 3-4 后,PCL 似乎对于初学者来说有点触手可及(至少对我而言)。我可以输入书上的代码,但我显然对语言的基本结构没有深入的了解。在再次进行 PCL 之前,我可能会尝试一些更温和的 Lisp 介绍。

4

1 回答 1

3

我不太确定这是否是您要问的,但您可能想尝试:

(defun get-nth (index-list data-list)
  (mapcar (lambda (index)
            (nth index data-list))
          index-list))
(get-nth '(0 1 0 2 0 3) '(a b c d e f))
==> (A B A C A D)

请看一下

更温和的 Lisp 介绍:

于 2017-11-16T17:26:38.863 回答