【发布时间】:2015-11-08 05:45:12
【问题描述】:
我有以下功能可以将两个列表合二为一。 应该是的类型:
@ : 'a list * 'a list -> 'a list
fun @ (nil, k) = k
| @ (x::l, k) = x :: @(l,k);
假设我们有两个列表:[1, 2, 3] 和 [4, 5, 6]。如果我打电话:
@([1, 2, 3], [4, 5, 6])
1::@([2, 3], [4, 5, 6])
1::2::@([3], [4, 5, 6])
1::2::3::@(nil, [4, 5, 6])
但是在这里我们到达了基本情况,我们的@ 调用返回列表[4, 5, 6],产生:
1::2::3::[4, 5, 6]
这显然不是我想要的。函数定义正确还是我误解了什么?
【问题讨论】:
-
我不明白这个问题。 为什么
1::2::3::[4, 5, 6]不是你想要的?如果@是一个附加函数,那么这就是正确的结果。你想要什么? -
好像你在混淆
1::2::3::[4,5,6](只是[1,2,3,4,5,6])和[1,2,3,[4,5,6]]。 SML 的类型系统不允许形成最后一个表达式。
标签: functional-programming sml