ML 一个实数列表 return 一个实数
ML a real list return a real number
我目前正在从事一个 ML 小项目并学习如何使用它,但我遇到了一些问题,但无法在网上找到任何资源。
我想要一个函数来 return 列表的最后一个数字,这是一个实数列表。我写了一个代码 return 一个单元素实数列表,但我希望它是一个实数而不是一个列表。这是我的代码:
fun last [] = nil
| last(head::nil) = [head]
| last(head::list) = last(list)
我以为
last(head::nil)=head
将有助于获得真实数字,但它只会给我一个错误:
operator domain: 'Z list list
operand: real list
谢谢!
正如 melpomene 所说,nil
不是 real 类型的值,因此它不可能是空列表的 return 类型.事实上,没有值可以被return编辑,因为列表是空的!这使得函数 last
部分。你想要 avoid partial functions,因为它们可能会在运行时崩溃。您可以定义一个替代函数,lastOpt
:
fun lastOpt [] = NONE
| lastOpt [x] = SOME x
| lastOpt (_::xs) = lastOpt xs
例如,
- lastOpt [1,2,3];
> val it = SOME 3 : int option
- lastOpt [];
> val it = NONE : 'a option
这将处理空列表的责任明确地传递给 lastOpt
的调用者。
内置函数 List.last
不安全,但有例外:
fun last [] = raise Empty
| last [x] = x
| last (_::xs) = last xs
我不推荐使用这个。
我目前正在从事一个 ML 小项目并学习如何使用它,但我遇到了一些问题,但无法在网上找到任何资源。
我想要一个函数来 return 列表的最后一个数字,这是一个实数列表。我写了一个代码 return 一个单元素实数列表,但我希望它是一个实数而不是一个列表。这是我的代码:
fun last [] = nil
| last(head::nil) = [head]
| last(head::list) = last(list)
我以为
last(head::nil)=head
将有助于获得真实数字,但它只会给我一个错误:
operator domain: 'Z list list
operand: real list
谢谢!
正如 melpomene 所说,nil
不是 real 类型的值,因此它不可能是空列表的 return 类型.事实上,没有值可以被return编辑,因为列表是空的!这使得函数 last
部分。你想要 avoid partial functions,因为它们可能会在运行时崩溃。您可以定义一个替代函数,lastOpt
:
fun lastOpt [] = NONE
| lastOpt [x] = SOME x
| lastOpt (_::xs) = lastOpt xs
例如,
- lastOpt [1,2,3];
> val it = SOME 3 : int option
- lastOpt [];
> val it = NONE : 'a option
这将处理空列表的责任明确地传递给 lastOpt
的调用者。
内置函数 List.last
不安全,但有例外:
fun last [] = raise Empty
| last [x] = x
| last (_::xs) = last xs
我不推荐使用这个。