【发布时间】:2023-03-12 02:50:01
【问题描述】:
我在名为“testing.pl”的文件中有下一个代码:
fact(1).
fact(2).
fact(3).
funcA(X) :- funcB(X).
funcB(X) :- fact(X).
testing :- funcA(_X).
然后,在 SWI-Prolog 解释器中,我查询 funcA(X).,输出为:
X = 1 ;
X = 2 ;
X = 3.
但是,每当我查询 testing. 时,输出是:
true ;
true ;
true.
所以,我的问题是:
如何将一条规则的结论用作另一条规则的前提(testing 右侧的funcA(X)),但效果与我查询该前提(funcA(X))的效果相同?
在上面的示例中,我想在我的“testing.pl”文件的某个位置写入testing.,并让 funcA(X) 执行与使用解释器查询时相同的操作,因此 funcB( X) 将检查 X 可以从 fact(N) 中获取的所有值并返回它。
我希望的结果是写testing. 并出现在屏幕上:
X = 1 ;
X = 2 ;
X = 3.
谢谢。
【问题讨论】:
-
如果您希望
testing.产生X = 1, ...,那么您需要将X作为testing的参数。所以,testing(X) :- funcA(X).(这似乎没有添加任何目的)。或者,不太理想的是,您可以编写结果:testing :- funcA(X), write('X = '), write(X), nl.