sml代码中的非穷举绑定失败

时间:2017-03-28 21:41:13

标签: smlnj

我应该更少一个函数(e,L)int * int list - > int list,返回L中小于e的所有元素的列表。我写了这个:

    fun less(_, nil) = nil
      | less(e, L) =
        let
           val x::xs = less (e, tl L)
        in
           if e > hd L then hd L::x::xs
           else nil @ x::xs
        end;

我遇到了绑定失败,肯定是在让位。我已经尝试了很多不同的thinfs,我无法弄清楚为什么这是错误的。任何人都可以发光吗?

1 个答案:

答案 0 :(得分:0)

val x::xs = less (e, tl L)

这与less (e, t1 L)的结果为空列表的情况不符。

该功能的正确实现是:

fun less (_, nil) = nil
  | less (y, x::xs) =
    let
       val xs' = less (y, xs)
    in
      if x < y then x::xs' else xs'