2
我是序言新手,并且使用BProlog。我可以在谓词中使用变量来定义仿函数吗
我一直在阅读一些示例程序来对相关数据组执行查询。但为了从具有相似结构的事实中推断,他们写了很多谓词,如search_by_name
,search_by_point
,这些谓词部分重复。
% working search in example
search_by_name(Key,Value) :-
Key == name,
sname(ID,Value),
point(ID,Point),
write(Value),write(Point),nl.
,当我尝试用一个更普遍的版本是这样来替换它们:
% a more general search I want to write
% but not accepted by BProlog
search_by_attr(Key,Value) :-
Key(ID,Value),
sname(ID,Name),
point(ID,Point),
write(Name),write(Point),nl.
错误arised:
| ?- consult('students.pl')
consulting::students.pl
** Syntax error (students.pl, 17-21)
search_by_attr(Key,Value) :-
Key<<HERE>>(ID,Value),
sname(ID,Name),
point(ID,Point),
write(Name),write(Point),nl.
1 error(s)
我做了错误的方式,或者是这样的在序言中不可能进行排斥?
代码示例数据可以在https://gist.github.com/2426119
可选择地,一个可并入密钥值作为参数之一。 – 2012-04-20 09:53:20
@Alexander Serebrenik:你的意思是'atom_concat(search_by_,Name,Callable),call(Callable,...)'? – CapelliC 2012-04-20 10:07:08
不,我想过关于重新搜索search_by_name和search_by_point以搜索第一个参数是名称或点。 – 2012-04-20 10:16:20