如何解决Facts VIEW,像 SQL VIEW?
我有以不同格式存储的事实,例如:
fact(a,b,c)
fact(d,e,f(g,h))
fact(j(k,l),m,n(o,p,q))
...
...总是三倍。 我想通过只看到函子来创建事实的视图,即
fact(a,f)
fact(j,n)
...
你是怎么做到的..?
..当然我希望能够将它们作为正常事实来查询......当然省略隐藏结构(考虑隐藏结构会很有趣,但现在不要让事情复杂化)
附注> 一般来说,最重要的是事实是一个三元组......将来我可能会改变项目的可能结构,但我希望能够在它是三元组的地方有简化的视图。欢迎任何与这些相关的想法。
解决方法
factview(fact(A,B,C)) :-
fact(Af,Bf,Cf),functor(Af,A,_),functor(Bf,functor(Cf,C,_).
给予
?- factview(X).
X = fact(a,b,c) ;
X = fact(d,e,f) ;
X = fact(j,m,n).
,
一种更通用的 SWI-Prolog 方法:
fact(a,c).
fact(d,f(g,h)).
fact(j(k,l),n(o,p,q)).
view(Predicate/Arity) :-
functor(Head,Predicate,Arity),forall( clause(Head,true),( compound_name_arguments(Head,Arguments),maplist([A,F]>>functor(A,F,Arguments,Functors),compound_name_arguments(Fact,writeln(Fact) ) ).
查询:
?- view(fact/3).
fact(a,c)
fact(d,f)
fact(j,n)
true.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。