新符号引入共Lisp的功能/宏

问题描述:

欲限定在共同口齿不清一个功能,它使用不知道口齿不清一些字/符号,对于具有这样的功能/宏例如:新符号引入共Lisp的功能/宏

(my-func-or-macro lst key-word idx) 

其返回在lst项目高达的idx如果key-wordidx到最后,如果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)。

+3

通常你会使用带有关键字参数的函数::from a nd:到。 –

+0

不要忘了添加实际的问题。'我想...'不是一个问题。 –

+0

你究竟在想什么?如何比较不同包装中的符号? – Sylwester

由于函数的每个参数都是在函数执行前计算的,所以需要一个符号来评估自己。

此类符号已经是语言的一部分:特殊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)