我目前正在研究一个ML小项目,并学习如何使用它,但这里有一些我面临的问题,但在网上找不到任何来源。
我想要一个函数来返回列表的最后一个数字,这是一个实数列表。我编写了一个代码来返回单个元素真实列表,但我将它作为一个实数而不是一个列表。这是我的代码:
fun last [] = nil
| last(head::nil) = [head]
| last(head::list) = last(list)
我想
last(head::nil)=head
将有助于获得实数,但它只是给我一个错误:
operator domain: 'Z list list
operand: real list
谢谢!
答案 0 :(得分:0)
正如melpomene所说,nil
不是 real 类型的值,因此它不能是空列表的返回类型。实际上,由于列表为空,因此无法返回没有值!这使得函数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
我不建议您使用它。