获取列表的最小值

编程入门 行业动态 更新时间:2024-10-16 20:19:37
本文介绍了获取列表的最小值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试查找列表的最小值(作为学习经验,因此没有min).

I am trying to find the minimum value of a list (as a learning experience, so without min).

我的方法如下:

minimo([X], X). minimo([X,Y|Tail], N):- (X > Y, minimo([Y,Tail], Y)); (X <= Y, minimo([X,Tail], X)).

这给了我以下错误:

语法错误:应为运算符

Syntax error: Operator expected

所以我的问题是:

  • 是什么导致语法错误?
  • 如果它确实能返回正确的值,我将在修复后亲自尝试,但这实际上是正确的方法吗?

谢谢.

推荐答案

程序中存在几个错误:

正如Joe Lehmann所指出的,
  • 没有'<='/2.它必须是'=<'/2.

  • as pointed out by Joe Lehmann, there is no '<='/2. It must be '=<'/2.

    以递归方式调用minimo/2时,错误地构造了列表.代替[Y,Tail],使用[Y|Tail].否则,您将获得一个列表,其中一个列表是第二个元素.

    when you call minimo/2 recursively, you construct the lists wrong. Instead of [Y,Tail] use [Y|Tail]. Otherwise, you get a list with a list as second element.

    您将minimo/2的递归调用的第二个参数绑定到Y或X.相反,它必须绑定到N.否则,您的N将永远不会被实例化.

    you bind the second argument of the recursive call of minimo/2 to Y or X. Instead it must be bound to N. Otherwise, your N will never be instantiated.

    您可以通过添加剪切或使用if-then-else('->' + ;)来进一步改善程序:

    You can improve your program further by adding cuts or using if-then-else ('->' + ;):

    minimo([X], X) :- !. minimo([X,Y|Tail], N):- ( X > Y -> minimo([Y|Tail], N) ; minimo([X|Tail], N) ).
  • 更多推荐

    获取列表的最小值

    本文发布于:2023-11-07 10:42:55,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1566236.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:最小值   列表

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!