我如何找到序言中的最小值

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
          ).