【问题标题】:Function Declaration in SML?SML 中的函数声明?
【发布时间】:2017-01-26 17:31:56
【问题描述】:

以下是我猜想的声明函数的一种方法(纠正我)&我想使用相同的样式做类似的事情,但它不起作用,为什么?

fun length nil = 0
| length (_::l') = 1 + (length l')

我想在不使用“case expression of”语法的情况下做到这一点。即如果函数 x 得到一个数字 3 然后返回 0 否则如果它是 4 然后 1

fun x 3 = 0
| x (4) = 1

Here's the error
stdIn:58.5-59.12 Warning: match nonexhaustive
    3 => ...
    4 => ...

Q2) 另外,函数体从哪里开始?看起来 nil 是一个参数,但我们有 |所以我很困惑!

【问题讨论】:

  • 您发布的定义有什么问题? (阅读您正在使用的任何书籍中的模式匹配。)
  • 这只是一个简单的递归示例。这个函数的类型是'a list -> int。就是这样写的。
  • 我的意思是你的功能。你说“它不工作”——这有什么问题?
  • 对不起,我认为它正在工作。只是给出了我出现在那里的警告。
  • 谢谢。我不知道为什么我之前没有看到。

标签: functional-programming sml ml


【解决方案1】:

是一个带模式匹配的定义,意思和

fun length ls = case ls of
                    nil => 0
                  | _::l' => 1 + (length l')

但更简洁易读。

您的函数会收到警告,因为您只匹配 34,但没有匹配其他整数。

如果你写,你会得到同样的警告

fun x n = case n of
              3 => 0
            | 4 => 1

匹配所有可能的值将消除警告:

fun x 3 = 0
  | x 4 = 1
  | x _ = 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    相关资源
    最近更新 更多