首页 文章

SML函数参数

提问于
浏览
-2

条件:
当1.列表长于2.列表返回值:1
当1.列表具有与2.相同数量的元素时 . 列表返回值:当1.列表短于w时为0 . list返回值:~1

([1,2,4,5],[3,2,5]);
1

([1,2],[1,5]);
 0

([5],[8,2,3]);
~1

1 回答

  • 1

    那么 length 函数在这种情况下可能是你的朋友:

    fun foo (xs, ys) =
        let
          val len_xs = length xs
          val len_ys = length ys
        in
          case (len_xs < len_ys, len_xs > len_ys) of
            (true, false) => ~1
          | (false, true) => 1
          | (false, false) => 0
        end
    

    这将产生结果:

    - foo ([1,2,4,5],[3,2,5]);
    val it = 1 : int
    - foo ([1,2],[1,5]);
    val it = 0 : int
    - foo ([5],[8,2,3]);
    val it = ~1 : int
    

    然而,这既低效又丑陋 . 所以我们也可以一次从每个列表中拉出一个元素,直到其中一个(或两个)变空:

    fun bar ([], []) = 0
      | bar (_, []) = 1
      | bar ([], _) = ~1
      | bar (_ :: xs, _ :: ys) = bar (xs, ys)
    

    结果如下:

    - bar ([1,2,4,5],[3,2,5]);
    val it = 1 : int
    - bar ([1,2],[1,5]);
    val it = 0 : int
    - bar ([5],[8,2,3]);
    val it = ~1 : int
    

相关问题