获取列表的最小值 [英] Getting the minimum value of a list

查看:125
本文介绍了获取列表的最小值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试查找列表的最小值(作为学习经验,因此没有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所指出的,
  1. 没有'<='/2.它必须是'=<'/2.

  1. 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的递归调用的第二个参数绑定到YX.相反,它必须绑定到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)
    ).

这篇关于获取列表的最小值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆