【发布时间】:2018-03-19 13:12:33
【问题描述】:
我对 SML/NJ 很陌生,有点迷茫。我一直在尝试实现一个函数,该函数将搜索包含一些列表的元组列表,例如:
val x = [(5, 2, [9 , 8, 7]), (3, 4, [6, 5, 0]), (11, 12, [8, 3, 1])]
一旦我的目标数字与元组元素 3 中的数字匹配,我希望我的函数将元组的第一个元素添加到新列表中。我已经尝试了几种实现,但到目前为止它们都不能正常工作。
type id = int* int* int list;
val b:id list = [(5,2,[9,8,7]), (3,4,[6,5,0]), (11, 12, [8,3,1])]
val number: int = 8;
val a: int list = nil;
fun findNum(nil) = a | findNum (x: id list) =
let val tem = hd(x)
val theList = #3tem
val i = #1tem
fun findMatch(nil) = a | findMatch(tem) =
if (number = hd(theList)) then i::a
else findMatch (tl(theList))
in findNum(tl(x))
end;
findNum(b);
我知道它写得不好,这就是为什么它总是返回一个空列表。我觉得我需要做“if else”而不是 let/in/end 所以它会递归地调用列表中的其余元组。我的问题是我不知道该怎么做,因为如果我使用 if/else 那么我不能在函数中声明一些值。我感谢任何建议或提示。
谢谢。
【问题讨论】:
-
您能否添加一个输入和所需输出的简单示例,例如输入
[(5,2,[9,8,7]), (3,4,[6,5,0]), (11, 12, [8,3,1])]您期望什么输出? -
一旦第三个元素中的数字匹配,我希望它返回元组的第一个元素列表。所以在这种情况下应该是 [5, 11 ]。
-
非常感谢。
-
什么是“新名单”?这就是你所说的函数的结果值吗?
-
是的,我的意思是函数的结果值列表。