1

述語が何fly(....)を出力しているのか理解するのに苦労しています。このファイルを参照してコンソール (SWI-Prolog)flight(city1, city2, A, B)に尋ねると、出力されA=9 B=10ます。私が考えていたのは、AとBの単一の値です。そのため、出力を使用して、達成しようとしていたことを完了したいと考えました。フライトプランナー。しかしflight(city1, city2, A, B)、述語で同じ質問 ( ) を使用すると、リストが返されるようです。Sと/またはを書き込もうとするまで、これに気づきませんでしたE。以下のコードで印刷[1,2,3]しているのは、なぜ私が のみを書きS、その後に何も書かなかったのか混乱したためです。そこで、明示的に定義されたリストをどのように記述して[1,2,3]印刷するかを確認することにしました。

私が受け取っている出力

8 ?- fly(city1, city4, 0, 24).
   14[1,2,3]9[1,2,3]
   false.

回線が 2 回呼び出されているように見えwrite(S), write([1,2,3]),ますが、これはなぜですか?

また、述語が呼び出されたときにAandのコンソールで単一の値を取得するのはなぜですか?B

逐語的なコード:

% I have no idea what I'm doing.
% Author: Skeeter

% Total of 5 cities
city(city1).
city(city2).
city(city3).
city(city4).
city(city5).

% List of flights
% flight( StartCity, EndCity, DepartureTime, ArrivalTime)
% city1 departures
flight( city1, city2, 09, 10).
flight( city1, city2, 10, 11).
flight( city1, city3, 12, 13).
flight( city1, city4, 14, 15).
flight( city1, city5, 16, 17).
% city2 departures
flight( city2, city1, 09, 10).
flight( city2, city1, 10, 11).
flight( city2, city3, 12, 13).
flight( city2, city4, 14, 15).
flight( city2, city5, 16, 17).
% city3 departures
flight( city3, city1, 09, 10).
flight( city3, city2, 10, 11).
flight( city3, city2, 12, 13).
flight( city3, city4, 14, 15).
flight( city3, city5, 16, 17).
% city4 departures
flight( city4, city1, 09, 10).
flight( city4, city2, 10, 11).
flight( city4, city3, 12, 13).
flight( city4, city3, 14, 15).
flight( city4, city5, 16, 17).
% city5 departures
flight( city5, city1, 09, 10).
flight( city5, city2, 10, 11).
flight( city5, city3, 12, 13).
flight( city5, city4, 14, 15).
flight( city5, city4, 16, 17).

% city1 arrivals
flight( city2, city1, 09, 10).
flight( city2, city1, 10, 11).
flight( city3, city1, 12, 13).
flight( city4, city1, 14, 15).
flight( city5, city1, 16, 17).
% city2 arrivals
flight( city1, city2, 09, 10).
flight( city1, city2, 10, 11).
flight( city3, city2, 12, 13).
flight( city4, city2, 14, 15).
flight( city5, city2, 16, 17).
% city3 arrivals
flight( city1, city3, 09, 10).
flight( city2, city3, 10, 11).
flight( city2, city3, 12, 13).
flight( city4, city3, 14, 15).
flight( city5, city3, 16, 17).
% city4 arrivals
flight( city1, city4, 09, 10).
flight( city2, city4, 10, 11).
flight( city3, city4, 12, 13).
flight( city3, city4, 14, 15).
flight( city5, city4, 16, 17).
% city5 arrivals
flight( city1, city5, 09, 10).
flight( city2, city5, 10, 11).
flight( city3, city5, 12, 13).
flight( city4, city5, 14, 15).
flight( city4, city5, 16, 17).

% is H1 later than X?
isLater(H1, [X|Y]) :-
H1 > X.


fly(CityFrom, CityTo, StartTime, EndTime) :-
flight(CityFrom, CityTo, S, E),
write(S), write([1,2,3]),
isLater(StartTime, S),
isLater(EndTime, E).
4

1 に答える 1