SML 在列表中添加两对数字
SML adding two pairs of numbers in a list
我正在尝试获取一个列表,例如 [1,2,3,4],并添加列表中的每一对以获得新列表 [3,7]。我一直收到错误消息,但我不知道这意味着什么。任何帮助将不胜感激。
fun listsum x =
if null x then 0
else hd x + hd(tl x) :: listsum(tl x) + listsum(tl(tl x));
stdIn:3.6-3.58 错误:运算符和操作数不一致[过载]
operator domain: 'Z * 'Z list
operand: 'Z * 'Y
in expression:
hd x + hd (tl x) :: listsum (tl x) + listsum (tl (tl <exp>))
这里有两个问题:第一个是在最后一行,你要求两个列表的总和+
;第二个是您在 if
的一个分支中返回 int
,在另一个分支中返回 list
。
第一个问题看起来就像一个 thinko:你已经在 ::
的左侧完成了你需要的所有添加,剩下的就是递归列表的其余部分。
同时修复两者,
fun listsum x =
if null x then []
else hd x + hd (tl x) :: listsum (tl (tl x));
这是一个递归函数,它在列表中进行模式匹配。 listsum
在奇数长度列表上抛出异常,因为这个列表将忽略最后一个奇数值。
fun sumTwo(xs: (int) list) =
case xs of
h :: ht :: t => h + ht :: sumTwo(t)
| h :: [] => []
| [] => []
测试:
- sumTwo [1,2,3];
val it = [3] : int list
- sumTwo [1,2,3,4];
val it = [3,7] : int list
我正在尝试获取一个列表,例如 [1,2,3,4],并添加列表中的每一对以获得新列表 [3,7]。我一直收到错误消息,但我不知道这意味着什么。任何帮助将不胜感激。
fun listsum x =
if null x then 0
else hd x + hd(tl x) :: listsum(tl x) + listsum(tl(tl x));
stdIn:3.6-3.58 错误:运算符和操作数不一致[过载]
operator domain: 'Z * 'Z list
operand: 'Z * 'Y
in expression:
hd x + hd (tl x) :: listsum (tl x) + listsum (tl (tl <exp>))
这里有两个问题:第一个是在最后一行,你要求两个列表的总和+
;第二个是您在 if
的一个分支中返回 int
,在另一个分支中返回 list
。
第一个问题看起来就像一个 thinko:你已经在 ::
的左侧完成了你需要的所有添加,剩下的就是递归列表的其余部分。
同时修复两者,
fun listsum x =
if null x then []
else hd x + hd (tl x) :: listsum (tl (tl x));
这是一个递归函数,它在列表中进行模式匹配。 listsum
在奇数长度列表上抛出异常,因为这个列表将忽略最后一个奇数值。
fun sumTwo(xs: (int) list) =
case xs of
h :: ht :: t => h + ht :: sumTwo(t)
| h :: [] => []
| [] => []
测试:
- sumTwo [1,2,3];
val it = [3] : int list
- sumTwo [1,2,3,4];
val it = [3,7] : int list