【问题标题】:To find maximum and minimum of a list in prolog在 prolog 中查找列表的最大值和最小值
【发布时间】:2017-09-19 14:47:39
【问题描述】:
domains
    list = integer*//shows error in swish saying "syntax error operator
                     expected"
    Max = integer
predicates
    maximum_no(list,integer)
clauses
    maximum_no([],Max):-
        write("Maximum No in List is:: ",Max),nl.
    maximum_no([H|T],Max):-
        H>Max,
        N = H,
        maximum_no(T,N).
    maximum_no(L,Max):-
        maximum_no(L,Max).

谁能告诉我如何解决这个错误?我确实发现代码是正确的,但它仍然显示错误? 我还要写代码来找到一个列表的最小数量!!

【问题讨论】:

  • 好吧,看来您正在使用 visual prolog。尝试在 domains 部分和 predicates 部分的每一行之后添加一个点 (.)。

标签: list prolog max minimum


【解决方案1】:

为了找到一个列表的最大值,以下单独工作:

% the maximum of a list of one element is this element
maximum_no([X],X).

% the maximum of a list is either the head or the maximum of the tail
% depending on if the head is lower than the max of the tail.
maximum_no([H|T],Max):-
    maximum_no(T,Max),
    H @< Max.
maximum_no([Max|T],Max):-
    maximum_no(T,M),
    M @< Max.

那么,找到一个列表的最小值应该不会太复杂。

【讨论】:

  • 即使这样它也会抛出错误。说一个失踪的运营商!还有一种方法可以在 prolog 中同时写入列表的最小值和最大值吗?
  • @ChetanGrandhe 你检查我的编辑了吗?那么如果maximum_no/2 有效,你所要做的就是写一个minimum_no/2minmax_no/3 如下:minmax_no(L,Min,Max) :- minimum_no(L,Min), maximum_no(L,Max).
  • 感谢@Rafalon 的回复,但我仍然收到一条错误消息,提示操作员预期。您是否尝试在swish.swi-prolog.org 中执行该代码????
  • 显然 swish 不适用于 visual prolog 所以当我使用 swish.swi-prolog.org/p/NybYBrJV.pl 时它似乎可以工作。
  • @ChetanGrandhe 请尝试告诉我它是否符合您的要求,然后随时接受这个答案。
【解决方案2】:

这应该可行。只需进行适当的更改即可。

maximum_no([H|T],Max):- maximum_no(T,MX), 最大值为最大值(H,MX)。

【讨论】:

    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 2015-06-29
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2011-04-27
    相关资源
    最近更新 更多