6
A
回答
5
(cond1 ->
consequent1
; cond2 ->
consequent2
;
alternative
)
为了记录在案,这就是所谓的条件。
8
( If1 -> Then1
; If2 -> Then2
; ...
; otherwise
).
请注意,if-then-else仅在不同条件下通过模式匹配表示不同条件时才有必要。所有可以通过模式匹配表达的东西都应该通过模式匹配来表达,因为这通常会导致更一般和更高效的代码。
1
这不是很容易找到,部分原因是(在@mat中指出)在Prolog中有一个惯用的替代方案。你可以找到here SWI-Prolog文档,虽然太过简单,但它是准确的。我引用一个相关点:
请注意(如果 - >然后)作为(如果 - >然后;失败),使构造失败,如果条件失败。这种不寻常的语义是ISO和所有事实上的Prolog标准的一部分。
2
只有当你想施加某种决定论时才需要 -/2。 它像一个本地剪切。但是如果你想让你的代码保持 一些非确定性,就没有必要使用 - >/2。
采取以下的命令性代码:
boolean listOfBool(Object obj) {
if (obj instanceof ConsCell) {
if (((ConsCell)ob).head() instanceof Boolean) {
return listOfBool(((ConsCell)ob).tail());
} else {
return false;
}
} else if (obj == null) {
return true;
} else {
return false;
}
}
这可以在Prolog中被编码,而不 - >/2,如下所示:
% bool(+Bool)
% bool(-Bool)
bool(0).
bool(1).
% list_of_bool(+List)
% list_of_bool(-List)
list_of_bool(L) :-
(L = [X|Y], bool(X), list_of_bool(Y);
L = []).
的优点是现在,它可以用于检查布尔表的列表 并生成布尔表的列表:
?- list_of_bool([0,1,0]).
Yes
?- list_of_bool([0,1,2]).
No
?- List=[_,_,_], list_of_bool(List).
List = [0, 0, 0] ;
List = [0, 0, 1] ;
List = [0, 1, 0] ;
List = [0, 1, 1] Etc..
通常,析取(;)/ 2可以分布在多个 子句中。如果这与将统一(=)/ 2移动到头部 相结合,则可以获得一定的速度,因为谓词是 通常更适合索引。
下面是如何list_of_bool的替代制剂看起来 像通过消除(;)/ 2和(=)/ 2:
% list_of_bool2(+List)
% list_of_bool2(-List)
list_of_bool2([X|Y]) :- bool(X), list_of_bool2(Y).
list_of_bool2([]).
上述作品完全相同的(它的实际工作更好, 因为在第一个查询没有选择点离开,什么 (;)/ 2通常检测不到无( - >)/ 2):
?- list_of_bool2([0,1,0]).
Yes
?- list_of_bool2([0,1,2]).
No
?- List=[_,_,_], list_of_bool(List).
List = [0, 0, 0] ;
List = [0, 0, 1] ;
List = [0, 1, 0] ;
List = [0, 1, 1] Etc..
这也是Prolog的怎么可以启动。仅限于规则 且没有析取(;)/ 2且没有统一(=)/ 2。底层Horn子句中已经有 后两个。 (;)/ 2和没有(=)/ 2,和 你不需要一个透明:
X = X.
(A ; _) :- A.
(_ ; B) :- B.
再见
相关问题
- 1. 如果数值类似于或类似于表单x上的Vba查找值?
- 2. Magento:我怎么做,如果产品页然后,否则,如果类别页然后,如果cms页然后
- 3. 如果不等于
- 4. UIScrollView,下拉效果类似于CalcBot
- 5. jQuery如果然后
- 6. JSON是一种语言,如果不是它将如何分类?
- 7. 如何数值评估类似于unet的CNN的结果?
- 8. 如果在序言中使用
- 9. Inno安装程序如果和语言
- 10. 序言如果其他语法
- 11. 序言 - 添加如果条件满足
- 12. 按频率对Hadoop结果(类似于字数)进行排序
- 13. 如果变量在db然后停止 - 如果变量不 - 然后输入它
- 14. 循环虽然数组然后如果然后输出结果?
- 15. (Adobe Acrobat CC)如果在计算中的声明不起作用
- 16. iPhone - 类似效果的Photoshop
- 17. php加入类似结果
- 18. Android - 如果然后不工作..?
- 19. Ubuntu - 如果命令似乎不提供其他结果
- 20. 要'如果'或不''如果'
- 21. VBA Excel中如果细胞不等于公式然后
- 22. 多个值,然后计算基于值如果然后语句
- 23. .BAT如果然后声明
- 24. MySql如果然后查询
- 25. 如果/然后在SAS
- 26. 如果然后其他人
- 27. 如果__和__在___然后
- 28. 如果然后在T-SQL
- 29. 如何做出更好的设计,如果两个过载功能类似于
- 30. 如果父类有X,则做到这一点,要不然这