当前位置:  开发笔记 > 编程语言 > 正文

Common Lisp:使用&rest参数

如何解决《CommonLisp:使用&rest参数》经验,为你挑选了3个好方法。

任何人都可以告诉我如何使用存储在&rest指定的值中的参数.

我已经阅读了很多内容,似乎作者只知道如何列出所有参数.

(defun test (a &rest b) b)

这很好看,但不是很有用.

到目前为止我发现的最好的是使用第一个,第二个等等来获取你正在寻找的参数.

(defun test (a &rest b)
    (first b))

我注意到这个方法在第十个参数停止工作,但是规范(从我读过的内容)支持至少50个.即使机会很小,我将使用50个参数,我想知道如何访问所有.

谢谢



1> Marko..:

Rest参数只是一个列表.您可以使用常规列表操作来处理它.

(defun test (a &rest b))
  (dolist (s b)
    (when (> s 1)
      (print s)
      (do-something-else b)))



2> Vatine..:

第一,第二等访问器功能是CAR/CDR或NTH之上的"公正"效用函数.所以,我想,你的具体问题的答案是"使用NTH或ELT"(或建立你自己的特定的后续功能).

如果需要,可以将ELEVENTH定义为:

(defun第十一(列表)(第10个清单))

但是,我发现,当我想要做的事情有0个或更多时,我主要使用&REST参数,而不是真正关心&REST列表中给定参数的具体位置.这通常需要使用LOOP,DO或DOLIST来遍历参数并对每个参数做一些事情; MAP系列或(偶尔)REDUCE.



3> Rainer Joswi..:

实际上这个功能很有用.你只需要尝试一下.

CL-USER 1 > (defun test (a &rest b) b)
TEST

CL-USER 2 > (test 1 2 3 4)
(2 3 4)

所以你看到B只是一个参数列表.因此每个列表和序列操作都适用.没有什么魔法.有访问NTH元素的函数,删除元素的函数等.

在Common Lisp HyperSpec中列出了相关的功能:

14. Conses词典

17.序列词典

有关基本的Lisp教程,请查看Touretzky的书:

Common Lisp:对符号计算的温和介绍

该书可以PDF和Postscript下载.它教授基本的Common Lisp.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有