1

私はPrologが初めてで、出力を書き込もうとしています。

私は関数を持っています: father(X,Y)X が Y の父親である場合、これは true です。したがって、これが起こります:

?- 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(ホーマー, バート), writeln('はい、ホーマーはバートの父です').

もしホーマーがバートの父親じゃなかったら、君は書き込みにたどり着けないだろう

変数を出力したい場合は、これを行います

testfather :- Father(X, bart), write(X), write(' は bart の父'), nl.

于 2013-03-28T01:35:48.600 に答える