以 2 个列表作为参数的 LISP 函数
LISP function that takes 2 lists as parameters
在过去 class 简要介绍过 LISP 之后,我决定先入为主并尝试学习 CLISP (reading Seibel's PCL chpt 5)。我的问题是关于编写一个将一组列表作为参数的函数。第一个列表是映射到第二个列表的一系列索引。我想传递一系列索引并让它 return 对应的元素。
到目前为止,这是我的代码大纲。我不确定我是否可以使用 nth 并将参数列表传递给它。我不确定 body-form 应该是什么样子。
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 教育相关主题的提示和指示。
事后分析:
在 chpts 3-4 的 re-examination 之后,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
- Formatted Output - 你的
format
通话中断了
- Lather, Rinse, Repeat: A Tour of the REPL - 你声称已阅读它,但显然你在将其粘贴到 REPL 之前发布了你的代码,因此请再次查看它。
更温和地介绍 Lisp:
在过去 class 简要介绍过 LISP 之后,我决定先入为主并尝试学习 CLISP (reading Seibel's PCL chpt 5)。我的问题是关于编写一个将一组列表作为参数的函数。第一个列表是映射到第二个列表的一系列索引。我想传递一系列索引并让它 return 对应的元素。
到目前为止,这是我的代码大纲。我不确定我是否可以使用 nth 并将参数列表传递给它。我不确定 body-form 应该是什么样子。
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 教育相关主题的提示和指示。
事后分析: 在 chpts 3-4 的 re-examination 之后,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
- Formatted Output - 你的
format
通话中断了 - Lather, Rinse, Repeat: A Tour of the REPL - 你声称已阅读它,但显然你在将其粘贴到 REPL 之前发布了你的代码,因此请再次查看它。
更温和地介绍 Lisp: