![](/img/trans.png)
[英]Prolog - Tell if abs value of max is greater then abs value of min in list of integers
[英]Prolog - Select the greater value in a list
我是prolog的新手,我的问题很简单,我只想从prolog的列表中获取一个元素,这些元素就像:
[[List],Cost]
例如:
Set = [ [[point1,point2,point3,point4],33],[[point1,point3,point2,point4],31],[[point2,point1,point3,point4],46] ]
在上一个示例中,我只想选择更大的一个:
[point2,point1,point3,point4],46]
谢谢你的帮助。
刚刚结束,如果我想获得所有昂贵的清单(一张一张)怎么办? 例如:
设置= [[L1,33],[L2,31],[L3,26],[L4,31]]
cheap_paths(Set,Path)。
L2; L4;
没有
问候,
拉尔斯。
以下子句将遍历列表,并返回具有最高值的元素(和值)。
% find_max(INPUT_LIST, OUTPUT_ELEMENT, OUTPUT_VALUE).
% Clause 1 - Only one element in the list - must be the max one
find_max([[R, Value]], R, Value).
% Clause 2 - The head element has a greater value than the remaining elements
find_max([[R, Value] | Others], R, Value) :-
find_max(Others, _, LowerValue),
LowerValue < Value, !.
% Clause 3 - The head element has a lower (or equal) value than the remaining elements
find_max([_ | Others], R, Value) :-
find_max(Others, R, Value).
使用示例:
2 ?- find_max([ [[point1,point2,point3,point4],33],[[point1,point3,point2,point4],31],[[point2,point1,point3,point4],46] ], Element, Value).
Element = [point2, point1, point3, point4],
Value = 46 .
3 ?-
只需遵循您的数据类型-列表的-定义,并按互斥情况区分大小写:
find_max([H|T], X):- find_max(T,H,X).
仅非空列表具有最大元素;
find_max([H|T], Y, X):- Y >= H -> find_max(T,Y,X) ; find_max(T,H,X).
如果到目前为止的最大值仍然是最大的,则继续遍历列表; 否则使用新遇到的最大值;
find_max([], X, X).
当列表用尽时,请注意最大范围-我们现在知道它是搜索到的最大元素。
请注意,当我们遍历列表时,我们将如何传递更新的当前信息,同时我们将传递的结果变量( X
)保持不变,以便与最终知道的结果统一。
那就是用简单的>=
比较元素; 您应该为输入列表的特殊数据元素做出特殊的比较谓词:
is_greater_than( [_,C1], [_,C2]):- C1 >= C2.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.