我如何找到序言中的最小值
How do i find the smallest value in prolog
我有以下代码
option(2):-
write('Enter place of origin: '), read(Origin),
write('Enter place of destination: '), read(Destination),
path(Origin, Destination, Path, Length),nl,nl,
printPath(Path), write(' '),
writef(' TOTAL DISTANCE = %d', [Length]),nl,fail;true.
我想找到长度中的最小值。我得到类似于此的输出
bahirdar-->mota TOTAL DISTANCE = 100
bahirdar-->markos-->mota TOTAL DISTANCE = 70
如果您想找到数据库中任意两个位置之间的最小距离(根据谓词 path/4),可以使用 CappelliC 建议的 aggregate 库。如果您想找到用户输入到您的程序中的最短路径,您将需要存储该信息。一个简单的方法是asserta
用户的回答:
:- dynamic user_path/2.
option(2):-
write('Enter place of origin: '), read(Origin),
write('Enter place of destination: '), read(Destination),
path(Origin, Destination, Path, Length),
asserta(user_path(Origin, Destination)),
nl,nl,
printPath(Path), write(' '),
writef(' TOTAL DISTANCE = %d', [Length]),nl,fail
;
true.
然后你可以用
找到最小路径
min_path(Path) :-
aggregate(
min(L,Path),
Origin^Destination^Path^(
user_path(Origin, Destination),
path(Origin, Destination, Path, L)
),
Length
).
我有以下代码
option(2):-
write('Enter place of origin: '), read(Origin),
write('Enter place of destination: '), read(Destination),
path(Origin, Destination, Path, Length),nl,nl,
printPath(Path), write(' '),
writef(' TOTAL DISTANCE = %d', [Length]),nl,fail;true.
我想找到长度中的最小值。我得到类似于此的输出
bahirdar-->mota TOTAL DISTANCE = 100
bahirdar-->markos-->mota TOTAL DISTANCE = 70
如果您想找到数据库中任意两个位置之间的最小距离(根据谓词 path/4),可以使用 CappelliC 建议的 aggregate 库。如果您想找到用户输入到您的程序中的最短路径,您将需要存储该信息。一个简单的方法是asserta
用户的回答:
:- dynamic user_path/2.
option(2):-
write('Enter place of origin: '), read(Origin),
write('Enter place of destination: '), read(Destination),
path(Origin, Destination, Path, Length),
asserta(user_path(Origin, Destination)),
nl,nl,
printPath(Path), write(' '),
writef(' TOTAL DISTANCE = %d', [Length]),nl,fail
;
true.
然后你可以用
找到最小路径min_path(Path) :-
aggregate(
min(L,Path),
Origin^Destination^Path^(
user_path(Origin, Destination),
path(Origin, Destination, Path, L)
),
Length
).