2010-03-29 88 views
3

作为Lisp中作业分配的一部分,我将对所找到的任何谓词使用apply或funcall。我的问题(在课程中发现)是:我怎么知道我在参数列表中找到了谓词?我已经做了一些基本的谷歌搜索,并没有提出任何东西。我们可以使用Lisp引用来完成作业 - 即使是指向一个好的在线资源(也可能是一个特定页面)的指针会很棒!Lisp:确定列表是否包含谓词

回答

1

规范性参考文献是Common Lisp Hyperspec

我不知道你的任务是什么,但是你可以根据可能的谓词列表检查每个参数,或者可以确定你的参数是否是一个函数(functionp),如果你可以假设所有函数都通过了将是谓词。

+0

感谢您的链接。奇怪的是,这不是谷歌第一次出现。 CMU的Common Lisp镜像,语言已经出现了我一直在寻找的其他功能。不过,这应该很好。谢谢,+1接受。 – justkt 2010-03-30 00:10:35

1

要添加到斯万特的答案:我不认为有任何方法来验证给定的函数是一个谓词,因为您可能能够在静态类型语言中做。大多数CL实现提供了自检功能,比如SBCL的sb-introspect:function-arglist,这将允许你检查只有一个参数被接受。不能保证函数的行为是理智的,但它可能比没有好。

+0

为了我的作业,我敢肯定,我可以假设所有传递的函数都是谓词,所以对''function''通过'apply'或'funcall'应该可以。但是,对于一般用途而言,知道没有'predicatep'类型的呼叫是很好的。 – justkt 2010-03-30 14:07:05