Prolog GNU – Univ运算符?说明

所以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,z].

?- Term =.. [g,y].
Term = g(x,y).

bar似乎调用PredList中每个谓词的Item,其中foo追溯到Items. (使用变量作为谓词不可移植;调用谓词应该是首选的.)

编辑:Kaarel是对的,univ可以由functor / 3和arg / 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


h5页面是什么意思
html5复合选择器都有哪些
什么是html5响应式布局
h5页面制作策划怎么做
html5关系选择器有哪些
h5有哪些缓存机制
position中的sticky如何使用
h5页面制作用什么软件
h5链接怎么做
html5层次选择器有哪些
h5是什么意思
localstorage有哪些方法
h5怎么制作点击图标
h5怎么制作倒计时
h5怎么生成链接
h5表格边框怎么设置
h5兼容问题怎么解决
h5怎么做交互设计
h5怎么做进度条
h5怎么加链接