LISP函数,它将2个列表作为参数

时间:2017-11-16 16:39:48

标签: common-lisp practical-common-lisp

在过去的课堂上简短地谈论LISP之后,我决定先跳过头来尝试学习CLISP(阅读Seibel's PCL chpt 5)。我的问题是编写一个以一组列表作为参数的函数。第一个列表是映射到第二个列表的一系列索引。我想传递一系列索引并让它返回相应的元素。

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

sys-info: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教育中相关主题的提示和指示。

尸检: 在重新检查第3-4章时,似乎PCL对初学程序员来说有点触及(至少对我而言)。我可以从书中输入代码,但我显然对语言的基本结构没有深刻的理解。在再次进行PCL之前,我可能会尝试对Lisp进行一些更温和的介绍。

1 个答案:

答案 0 :(得分: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: