以2个列表作为参数的LISP函数



在上一节课上简要介绍了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元素。我的思路是否正确?

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

尸检:在重新检查chpts3-4之后,PCL对于一个刚开始的程序员来说似乎有点遥不可及(至少对我来说是这样)。我可以从书中输入代码,但我显然对语言的基本结构没有深入了解。在再次学习PCL之前,我可能会尝试对Lisp做一些温和的介绍。

我不太确定这是否是你所问的,但你可能想试试:

(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调用已中断
  • Lather,Rinse,Repeat:REPL之旅-您声称已经阅读了它,但很明显,您在将代码粘贴到REPL之前已经发布了代码,所以请再次查看

更温和的Lisp:介绍

  • Graham的ANSI公共Lisp

最新更新