【发布时间】:2021-10-28 02:11:06
【问题描述】:
我正在编写一个应该返回 a list of 'a * 'a tuples 的函数。我实际上只将它用于整数。问题是,当我在模式匹配中编写基本案例时,我不知道如何编译:我尝试了类似
fun myf [] = []
fun myf [] = [()]
fun myf [] = [(NONE, NONE)]
没有,以上 3 个都完成了工作。 我在网上搜索什么也没找到。
【问题讨论】:
-
第一个是一个空列表,可以是
'a * 'a list类型。第二个是unit类型的列表,显然与您需要的类型不匹配。第三个是'a option * 'b option list类型的值,同样,这与您需要的类型不匹配。 -
将
[]提供给函数时的预期输出是什么? -
如果第一个不起作用,问题在于您如何将它与其余代码结合起来。请发帖minimal reproducible example。
-
您的问题是关于“返回”,但您正在尝试模式匹配,这通常会发生在您的函数的参数上。问题的整个结构具有误导性。您是否要对“对列表”类型的输入进行模式匹配,或者您希望输入中的值是什么类型?因为返回 ('int * int) 列表很简单,只需编写 [(1, 2)] 或任何元素为 (int * int) 类型的列表构造,也就是一对整数。
-
例如:fun myf x = if x = 0 then [] else [(1, 2)];或 fun myf x = if x = 0 then [] else (1, 2)::[];返回一个 ('a * 'a) 列表就这么容易.. :-) 除非,如果你能帮助我们,你期望用什么来代替 'x'(参数)?
标签: functional-programming sml smlnj