我试图获取一个列表,例如[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));
标准: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>))
答案 0 :(得分:0)
这里有两个问题:第一个是在最后一行,你要求+
的两个列表的总和;第二个是你在int
的一个分支中返回if
,在另一个分支中返回list
。
第一个问题看起来像是一个思考者:你已经在::
的左侧完成了所需的所有添加,剩下的就是递归到列表的其余部分。 / p>
修复两者,
fun listsum x =
if null x then []
else hd x + hd (tl x) :: listsum (tl (tl x));
答案 1 :(得分:0)
这是一个模式匹配列表的递归函数。 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