我試圖定義一個謂詞內聯以將它傳遞給Prolog中的另一個謂詞。在序言中定義謂詞內的謂詞
% Test if a "product" of graphs G1 and G2 has a "mini-loop" starting from Q
test_property_combined(G1,G2,Q):-
(g12(Q1,Q2) :- combine(G1,G2,Q1,Q2)),
some_property(g12,Q).
(上面的語法顯然是錯誤的。)
後來g12
將由call
% Test if a graph G has a "mini-loop" starting from Q
some_property(G,Q):-
Goal1 =.. [G,Q,C],
Goal2 =.. [G,C,Q],
call(Goal1),
call(Goal2).
的問題仍然存在,因爲我想在某種測試some_property
調用先前定義的謂詞的集合。
% Create a "product" of graphs G1 and G2
combine(G1,G2,(Q1,Q2),(Q3,Q4)):-
Goal1 =.. [G1,Q1,Q3],
Goal2 =.. [G2,Q2,Q4],
call(Goal1),
call(Goal2).
所提及的謂詞和測試查詢的一個例子:
% g1 and g2 are graphs
g1(a,b).
g1(b,a).
g2(c,d).
g2(d,c).
?- test_property_combined(g1,g2,(a,c)).
一個人如何去這樣做呢?
對不起,我不明白這一點。你知道[lambda](http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/lambda.pl)嗎? – CapelliC 2013-02-17 07:47:43
不,但在這裏使用它似乎有點矯枉過正。感謝您的鏈接。 – 2013-02-17 13:17:25
不要使用'(= ..)/ 2'來模擬高階編程。改用call/N。使用['library(lambda)'](http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord) – false 2013-02-17 17:22:01