我想为标准 ML 中的新数据类型创建一个函数,该数据类型称为 intnest,定义如下:
datatype intnest =
INT of int
| LIST of intnest list;
我想创建一个函数来添加 intlist 中的所有整数,我尝试了以下代码:
fun addup (INT n) = n
| addup (LIST x::xs) = x + addup(xs);
我究竟做错了什么?
编辑:
我还尝试了以下方法:
fun addup (INT n) = n
| addup (LIST x::xs) = addup(x) + addup(xs);
所以 x 是 INT 类型,所以第一个选项返回它的 int 值,而 addup(xs) 是一个递归调用,返回相同的第二个选项。
还尝试了以下方法:
fun addup (INT n) = n
| addup (LIST []) = 0
| addup (LIST x::xs) = addup(x) + addup(LIST xs);
但我收到以下错误:
stdIn:146.4-151.50 Error: parameter or result constraints of clauses don't agree [tycon mismatch]
this clause: intnest list -> 'Z
previous clauses: intnest -> 'Z
in declaration:
addup =
(fn INT n => n
| LIST nil => 0
| :: (<pat>,<pat>) => addup <exp> + addup <exp>)
stdIn:151.25-151.50 Error: operator and operand don't agree [tycon mismatch]
operator domain: intnest
operand: intnest list
in expression:
addup x