微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Facts VIEW,像 SQL VIEW?

如何解决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 举报,一经查实,本站将立刻删除。