我需要你的帮助! 我正在尝试创建一个函数,它将两个
类型的元素作为输入 (string*string*string) list
和
(string*string) list
并返回
类型的元素 (string*string) list
以特定方式操纵。 我需要这样的东西:
returnString(([("s0","l0","s1"),("s1","l1","s0")]),([("s0","phi1"),("l0","chi1"),("l1","chi2"),("s1","phi2")]));
接受这些输入的函数应该返回我:
val it = [(("s0l0s1","chi1"),("s1l1s0","chi2"))]
应该是: 如果是第一个输入元素的第二个字符串
(string*string*string)
对应于第二个输入元素的第一个字符串
(string*string)
然后我会把我需要的元素放在列表中,否则我会继续检查。
我尝试了很多方法...使用递归函数,使用地图函数...但我对这种语言有点新意,我找不到办法,因为sml不容易处理循环。
如果你帮助我,或者你有一些提示,我将非常感激。
非常感谢大家!
答案 0 :(得分:1)
如果代码中的解释有意义,请告诉我。
fun example (xss, yss) =
case (xss, yss) of
(* If the 1st list is empty, then the result is an empty list. *)
([], _) => []
(* If the 2nd list is empty, then the result is also an empty list. *)
| (_, []) => []
(* Otherwise, we decompose the tuples in the two lists *)
| ((a, b, c) :: xs, (x, y) :: ys) =>
(* verify that our condition holds *)
if b = x then
(* in which case we have a solution and recurse with the rest *)
(a ^ b ^ c, y) :: example (xs, ys)
else
(* otherwise, we recurse with the first list intact, but skip the *)
(* current element in the second list. *)
example (xss, ys)
另外,请查看this answer of mine,了解如何在标准ML中调用函数。