【发布时间】:2020-04-05 21:56:20
【问题描述】:
您好,我正在为学校工作,我正在尝试获取通过递归返回的最大数量。 让我用例子更好地解释:
我有这个谓词:
li(_, []).
li(NAME, [H|T]) :-
find(NAME, H, Occur),
li(NAME, T).
li(NAME) :-
findall(T, pri(name(T), _, _, _), Info),
li(NAME, Info).
第 2 行中的谓词(查找),它的作用是,通过给出名称和一些其他信息,它将返回给我一个数字(发生)。我要做的是知道整个递归中的最高数(发生)是多少。
我试图做一些比较,但它不起作用,它说最高没有定义,我知道这是因为它没有任何相关的价值,但我不知道如何做到这一点。
li(_, [], 0).
li(NAME, [H|T], Highest) :-
find(NAME, H, Occur),
li(NAME, T, Temp),
Temp is Occur,
Highest < Temp,
Highest is Temp.
li(NAME) :-
findall(T, pri(name(T), _, _, _), Info),
li(NAME, Info, Return),
write(Return).
目标是将数字写在第 3 行的末尾。 有谁知道我能做些什么来解决这个问题?谢谢。
编辑
我又试了一次:
li(_, [], 0).
li(NAME, [H|T], Highest) :-
find(NAME, H, Occur),
li(NAME, T, Temp),
Temp < Occur,
Temp is Occur,
Highest is Temp.
li(NAME) :-
findall(T, pri(name(T), _, _, _), Info),
li(NAME, Info, Return),
write(Return).
它不会触发任何错误但什么也没有发生,返回一个 false 并且什么也不打印。
EDIT2
感谢@David Tonhofer,我现在可以得到最高的数字。但我真正想要的是与那个高数相关联的名称。
li(NAME, [H|T], Highest, X) :-
find(NAME, H, Occur),
li(NAME, T, Temp),
Highest is max(Temp,Occur), X = ??.
我是一步一步来的,首先尝试获得最大的数字,然后获得名称,但现在有了 MAX,我想我无法知道。
一开始我是这样想的:
li(_, [], 0).
li(NAME, [H|T], Highest, X) :-
find(NAME, H, Occur),
li(NAME, T, Temp),
Temp < Occur,
Temp is Occur,
Highest is Temp, X is NAME.
li(NAME) :-
findall(T, pri(name(T), _, _, _), Info),
li(NAME, Info, Return, X),
write(Return), write(X).
【问题讨论】:
标签: prolog