在 Prolog 谓词中,我经常编写像这样的重复条件语句,但我希望它们可以写得更简洁:
output(Lang, Type, Output) :-
(Lang = javascript ->
Output = ["function", Type];
Lang = ruby ->
Output = ["def", Type];
Lang = java ->
Output = [Type]).
是否可以用更简洁的 switch 语句来替换这一系列条件语句?
在 Prolog 中,使用元谓词(以目标或谓词作为参数的谓词)来定义自己的控制结构非常容易。
例如,您可以实现一个 switch 结构,例如
switch(X, [
a : writeln(case1),
b : writeln(case2),
c : writeln(case3)
])
通过定义
switch(X, [Val:Goal|Cases]) :-
( X=Val ->
call(Goal)
;
switch(X, Cases)
).
如果有必要,可以通过许多 Prolog 系统支持的编译时转换来提高效率(inline/2在 ECLiPSe 中,或在其他几个系统中的目标扩展)。
通过运算符声明,您可以将语法调整为几乎任何您喜欢的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)