View 事实视图,比如SQL视图?
我有以不同格式存储的事实,例如:View 事实视图,比如SQL视图?,view,prolog,functor,swi-prolog,View,Prolog,Functor,Swi Prolog,我有以不同格式存储的事实,例如: fact(a,b,c) fact(d,e,f(g,h)) fact(j(k,l),m,n(o,p,q)) ... 。。总是三倍。 我想通过只看到函子来创建事实视图,即 fact(a,b,c) fact(d,e,f) fact(j,m,n) ... 你是怎么做到的 。。当然,我希望能够作为正常的事实来查询它们。。。当然,省略隐藏的结构(考虑隐藏的结构会很有趣,但现在不要让事情复杂化) PS> 一般来说,最重要的是事实是一个三元组。。在未来,我可
fact(a,b,c)
fact(d,e,f(g,h))
fact(j(k,l),m,n(o,p,q))
...
。。总是三倍。
我想通过只看到函子来创建事实视图,即
fact(a,b,c)
fact(d,e,f)
fact(j,m,n)
...
你是怎么做到的
。。当然,我希望能够作为正常的事实来查询它们。。。当然,省略隐藏的结构(考虑隐藏的结构会很有趣,但现在不要让事情复杂化)
PS>
一般来说,最重要的是事实是一个三元组。。在未来,我可能会更改项目的可能结构,但我希望能够在三元组中使用简化视图。任何与此相关的想法都是受欢迎的
factview(fact(A, B, C)) :-
fact(Af, Bf, Cf),
functor(Af, A, _),
functor(Bf, B, _),
functor(Cf, C, _).
给予
给予
一种更通用的SWI Prolog方法:
fact(a,b,c).
fact(d,e,f(g,h)).
fact(j(k,l),m,n(o,p,q)).
view(Predicate/Arity) :-
functor(Head, Predicate, Arity),
forall( clause(Head, true),
( compound_name_arguments(Head, Predicate, Arguments),
maplist([A,F]>>functor(A,F,_), Arguments, Functors),
compound_name_arguments(Fact, Predicate, Functors),
writeln(Fact) ) ).
查询:
?- view(fact/3).
fact(a,b,c)
fact(d,e,f)
fact(j,m,n)
true.
一种更通用的SWI Prolog方法:
fact(a,b,c).
fact(d,e,f(g,h)).
fact(j(k,l),m,n(o,p,q)).
view(Predicate/Arity) :-
functor(Head, Predicate, Arity),
forall( clause(Head, true),
( compound_name_arguments(Head, Predicate, Arguments),
maplist([A,F]>>functor(A,F,_), Arguments, Functors),
compound_name_arguments(Fact, Predicate, Functors),
writeln(Fact) ) ).
查询:
?- view(fact/3).
fact(a,b,c)
fact(d,e,f)
fact(j,m,n)
true.
作为factview(A、B、cde)进行查询如何。。或者factview(A,gh,Z)…您可以从
factview
谓词中删除事实复合词,只需编写factview(A,B,C)
,然后就可以进行查询。这就是你要问的吗?我明白了。。谢谢..让它成为factview(A,B,C):-…作为factview(A,B,cde)进行查询怎么样。。或者factview(A,gh,Z)…您可以从factview
谓词中删除事实复合词,只需编写factview(A,B,C)
,然后就可以进行查询。这就是你要问的吗?我明白了。。谢谢…就让它成为factview(A,B,C):-…这很好。可能需要使其动态化,并断言事实来查询它们。@rajashekar是的!您可以调用assertz/1
,而不是write/1
@rajashekar或者,您也可以通过将其作为谓词view/2
的第二个参数添加(也可以通过删除对forall/2
的调用)来获取事实。这将是一个更好的解决方案,这很好。可能需要使其动态化,并断言事实来查询它们。@rajashekar是的!您可以调用assertz/1
,而不是write/1
@rajashekar或者,您也可以通过将其作为谓词view/2
的第二个参数添加(也可以通过删除对forall/2
的调用)来获取事实。这将是一个更好的解决方案。词汇详细信息:“函子”->“函子名”。“函子”即“名称/算术”(根据ISO标准定义)。因此,您确实希望看到(函子或谓词或函数)标识符或名称词汇表的详细信息:“函子”-->“函子名称”。“函子”即“名称/算术”(根据ISO标准定义)。因此,您确实希望看到(函子、谓词或函数)标识符或名称