在过去的课堂上简短地谈论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进行一些更温和的介绍。
答案 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)
请看一下
mapcar
nth
format
来电已被破坏更加温和地介绍Lisp: