我想重新格式化我的代码而没有if then else条件。是否有捷径可寻?这只是代码的例子。我认为在prolog中使用IF-THEN-ELSE很奇怪:\而且我希望得到一些更复杂的案例。像模式匹配
rules(Param1, Param2) :-
(
A ->
B, C, D,
(
E -> F
;
G, H
)
;
I
).
编辑:编辑我的代码看起来更像它应该看起来
一般翻译方案
pred(X):-
( A -> B
; C -> D
; G
).
pred(Y):- Q.
是
pred(X):- pred1(X).
pred(Y):- Q.
pred1(X):- call(A), !, B.
pred1(X):- call(C), !, D.
pred1(X):- G.
非常感谢qazxsw poi指出需要在j4n bur53或call
中使用qazxsw poi - qazxsw poi!
if-then-else不是很奇怪。它们是ISO核心标准的一部分,在7.8控制结构中定义,7.8.8(;)/ 2 - if-then-else,它们具有各种Prolog编译方案的优点。
A
如果if-then-else出现在子句的中间,这些Prolog编译策略特别有用,因为生成的代码通常比if-then-else移动到单独的辅助谓词中产生更少的开销。
对于析取(;)/ 2也是如此。根据经验,我会说它是安全的,如果没有if-then-else分支引入许多新变量与其他分支相比。当Prolog编译器在if-then-else之外移动变量时,这是有意义的。
下面是一个例子,其中if-then-else在YAP Prolog中表现出相当于其他编程风格的性能:
C
if-then-else版本运行速度最快:
->
documentation