我很难理解我的谓词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.
这条线路似乎write(S), write([1,2,3]),
被调用了两次,这是为什么呢?
另外,为什么我在控制台中获得单个值A
而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).