gpt4 book ai didi

prolog - 具有相同接地头的 Prolog 子句的多个实例。除了(可疑的)计算控制之外,还有什么用处?

转载 作者:行者123 更新时间:2023-12-02 09:04:18 25 4
gpt4 key购买 nike

在 SWI Prolog 中:

允许精确的子句重复:

a(1).
a(1).
?- a(X).
X = 1 ;
X = 1.

甚至:

c :- format("Hello from first c!").
c :- format("Hello from second c!").
Hello from first c!
true ;
Hello from second c!
true.

更一般地说,具有相同的完全接地头但不同主体的子句也是如此:

b(1) :- format("Hello from first b!").
b(1) :- format("Hello from second b!").
?- b(1).
Hello from first b!
true ;
Hello from second b!
true.

具有相同非接地头的子句感觉更合理:

p(X) :- format("Yup, this is p(~w)",X).
p(X) :- format("Yup, this is also p(~w)",X).
p(X) :- format("You think you can get rid of good old p(~w) just like that?",X).
?- p('homer simpson').
Yup, this is p(homer simpson)
true ;
Yup, this is also p(homer simpson)
true ;
You think you can get rid of good old p(homer simpson) just like that?
true.
?- p(X).
Yup, this is p(_4782)
true ;
Yup, this is also p(_4782)
true ;
You think you can get rid of good old p(_4782) just like that?
true.

这涵盖了具有 protected 主体的子句的合理情况:

p(X) :- X < 0,   format("It's less than 0: ~w", X).
p(X) :- X =:= 0, format("It's exactly 0: ~w", X).
p(X) :- X > 0, format("It's larger than 0: ~w", X).

再想一想...我们已经在内置 repeat 中遇到了最终的情况。 :

?- repeat.
true ;
true ;
true ;
true ;

或者可以轻松构建中间案例:

h :- member(_,[1,2,3]).
?- h.
true ;
true ;
true.

教科书以某种方式掩盖了谓词具有附加语义的事实:它们不仅可以是 falsetrue对于任何给定的基本参数,但它们实际上可以是 true(n) - “正确 n 次,n ≥ 0” .

从理论的角度来看,这是值得怀疑的,至少对于普通的经典逻辑来说是这样。

另一方面,从计算的角度来看,它对于以下方面很有用:

  • 副作用(对于输出而不是对于输入,而且影响很小)。
  • 控制计算(即 repeat )。

还有其他用途吗?

我真的觉得编译器应该标记无变量的情况,例如 a/1 , c/0 , b/1以上为错误(易于检测),甚至 repeat/0可能应该有一个值:repeat(Count) 。任何成功重做的事情都不应该在相同的上下文中基于完全相同的基础参数成功重做。它具有与 a(X) :- b(Y). b(Z). 相同的松软的无关感。呜呜!

最佳答案

是的,用于纯程序中的诊断目的。通过复制一个子句,您可以回答该子句对解决方案的贡献有多大的频率。

也就是说,您计算从查询中获得的答案/解决方案,并将它们与同一程序加上重复的子句进行比较。如果(冗余)解决方案的数量现在增加,您就知道该条款有所贡献。 ld 因子告诉您频率。

请注意,跟踪器无法轻松告诉您这一点。

关于prolog - 具有相同接地头的 Prolog 子句的多个实例。除了(可疑的)计算控制之外,还有什么用处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60282952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com