Lisp:确定列表是否包含谓词

Lisp:确定列表是否包含谓词,lisp,predicate,Lisp,Predicate,作为Lisp作业的一部分,我将对找到的任何谓词使用apply或funcall。我的问题(在课程作业中未提及)是:我如何知道何时在我的参数列表中找到了谓词?我已经做了一些基本的谷歌搜索,到目前为止什么也没找到。我们被允许在作业中使用Lisp引用-即使是指向一个好的在线资源(也许是其中的一个特定页面)的指针也会很棒 规范引用是 我不知道您的赋值是什么,但您可以根据可能的谓词列表检查每个参数,或者确定您的参数是否是函数(functionp),如果您可以假设传入的所有函数都是谓词。补充Svante的答案

作为Lisp作业的一部分,我将对找到的任何谓词使用apply或funcall。我的问题(在课程作业中未提及)是:我如何知道何时在我的参数列表中找到了谓词?我已经做了一些基本的谷歌搜索,到目前为止什么也没找到。我们被允许在作业中使用Lisp引用-即使是指向一个好的在线资源(也许是其中的一个特定页面)的指针也会很棒

规范引用是


我不知道您的赋值是什么,但您可以根据可能的谓词列表检查每个参数,或者确定您的参数是否是函数(
functionp
),如果您可以假设传入的所有函数都是谓词。

补充Svante的答案:我认为没有任何方法可以验证给定函数是否是谓词,就像您在静态类型语言中所做的那样。大多数CL实现都提供了像SBCL的
sb introspect:function arglist
这样的内省函数,允许您检查是否只接受一个参数。虽然不能保证函数的行为是正常的,但总比没有好。

谢谢链接。奇怪的是,这不是谷歌第一次出现。CMU是CommonLisp的镜像,我一直在寻找的其他函数都用到了该语言。不过,这应该很棒。谢谢,+1&接受。就我的家庭作业而言,我非常确定我可以假设所有传递的函数都是谓词,因此在传递的
functionp
上使用
apply
funcall
应该可以。但是对于一般用途来说,最好知道没有
predicatep
类型的调用。