新符号引入共Lisp的功能/宏
问题描述:
欲限定在共同口齿不清一个功能,它使用不知道口齿不清一些字/符号,对于具有这样的功能/宏例如:新符号引入共Lisp的功能/宏
(my-func-or-macro lst key-word idx)
其返回在lst
项目高达的idx
如果key-word
是到从idx
到最后,如果key-word
是从。
所以实际上它应该像:
(my-func-or-macro '(1 2 3 4 5 6) from 3) => '(4 5 6)
和
(my-func-or-macro '(1 2 3 4 5 6) to 3) => '(1 2 3)
由于宏不评价他们的观点,我想我应该用哪个不关心from
和宏to
(注意我不想通过引用的参数像'from
'to
)。
答
由于函数的每个参数都是在函数执行前计算的,所以需要一个符号来评估自己。
此类符号已经是语言的一部分:特殊KEYWORD
包中的所有符号都会自行评估。用前导冒号写的符号G。 :foo
被包含在该包中。
而且语言的一部分是用这样的关键词来识别参数关键字参数:
(defun my-func (list &key from)
(subseq list from))
(my-func '(0 1 2 3 4 5) :from 3)
=> (3 4 5)
你可以给默认值,这样的参数:
(defun my-func (list &key (from 0) (to (length list)))
(subseq list from to))
(my-func '(0 1 2 3 4 5) :from 3)
=> (3 4 5)
(my-func '(0 1 2 3 4 5) :to 3)
=> (0 1 2)
(my-func '(0 1 2 3 4 5) :from 1 :to 4)
=> (1 2 3)
关键字参数可以在任何给予order:
(my-func '(0 1 2 3 4 5) :to 4 :from 1)
=> (1 2 3)
通常你会使用带有关键字参数的函数::from a nd:到。 –
不要忘了添加实际的问题。'我想...'不是一个问题。 –
你究竟在想什么?如何比较不同包装中的符号? – Sylwester