1

我是 Prolog 的新手,我正在尝试编写一些输出。

我有一个功能:father(X,Y)如果 X 是 Y 的父亲,那就是真的,所以会发生这种情况:

?- father(homer,bart)
true

我该怎么做这样的事情:

doTests :-
  write('Test1 expect true ==> '),(write father(homer,bart)),nl,
  write('Test2 expect false ==> '),(write father(homer,nelson)),nl,
  write('Test3 expect true ==> '),(write father(abe,homer)).

所以我得到这样的东西......

?- doTests.
Test1 expect true ==> true
Test2 expect false ==> false
Test3 expect true ==> true

?

4

2 回答 2

1

我会分解模式:

:- meta_predicate oneTest(+,:).

oneTest(Label, Pred) :- 
   (call(Pred) -> R = true ; R = false), format('~s ==> ~s~n', [Label, R]).

doTests :-
  oneTest('Test1 expect true', father(homer,bart)),
  oneTest('Test2 expect false', father(homer,nelson)),
  oneTest('Test3 expect true', father(abe,homer)).
于 2013-03-28T07:54:28.043 回答
0

testfather :-father(homer, bart), writeln('Yes Homer is barts Father')。

如果 homer 不是 bart 的父亲,你将永远无法到达 writeln

如果要打印变量,请执行此操作

testfather :-father(X, bart), write(X), write('是 bart'的父亲'), nl。

于 2013-03-28T01:35:48.600 回答