gpt4 book ai didi

Prolog GNU - Univ 运营商?对它的解释

转载 作者:行者123 更新时间:2023-12-03 23:38:05 25 4
gpt4 key购买 nike

所以是 univ 运算符。我不完全明白。

例如这个:

foo(PredList,[H|_]) :- bar(PredList,H).
foo(PredList,[_|T]) :- foo(PredList,T),!.

bar([H|_],Item) :- G =.. [H,Item],G.
bar([_|T],Item) :- bar(T,Item).

这是在做什么?这会查看另一个谓词是否为真。我不明白“..”是做什么的。

如果没有 univ 运算符,您将如何重写它?

最佳答案

Univ ( =.. ) 将一个术语分解为一个成分列表,或者从这样的列表中构造一个术语。尝试:

?- f(x,y) =.. L.
L = [f, x, y].

?- f(x,y,z) =.. [f|Args].
Args = [x, y, z].

?- Term =.. [g,x,y].
Term = g(x, y).
bar似乎在 PredList 中调用每个谓词在 Item , 与 foo回溯 Item s。 (使用变量作为谓词是不可移植的;应该首选 call 谓词。)

编辑 : Kaarel 说得对, univ 可以换成 functor/3arg/3 , 如下:
bar([H|_],Item) :-
functor(Goal,H,1), % unifies Goal with H(_)
arg(1,Goal,Item), % unifies first argument of Goal with Item
call(Goal). % use this for portability

关于Prolog GNU - Univ 运营商?对它的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4129484/

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