SML - 列表字符串的递归函数
SML - Recursive function for list string
我需要你的帮助!
我正在尝试创建一个函数,它将两个
类型的元素作为输入
(string*string*string) list
和
(string*string) list
和 return 类型的元素
(string*string) list
以特定方式进行操作。
我需要这样的东西:
returnString(([("s0","l0","s1"),("s1","l1","s0")]),([("s0","phi1"),("l0","chi1"),("l1","chi2"),("s1","phi2")]));
接受这些输入的函数应该return我:
val it = [(("s0l0s1","chi1"),("s1l1s0","chi2"))]
应该是:
如果第一个输入元素的第二个字符串
(string*string*string)
对应第二个输入元素的第一个字符串
(string*string)
那我就把我需要的元素放到列表里,否则我继续检查。
我尝试了很多方法...使用递归函数,使用映射函数...但我是这种语言的新手,我找不到方法,因为 sml 不是易于使用循环处理。
如果您能帮助我,或者即使您有一些建议可以提出,我将不胜感激。
非常感谢大家!
让我知道代码中的解释是否有意义。
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 中调用函数。
我需要你的帮助! 我正在尝试创建一个函数,它将两个
类型的元素作为输入 (string*string*string) list
和
(string*string) list
和 return 类型的元素
(string*string) list
以特定方式进行操作。 我需要这样的东西:
returnString(([("s0","l0","s1"),("s1","l1","s0")]),([("s0","phi1"),("l0","chi1"),("l1","chi2"),("s1","phi2")]));
接受这些输入的函数应该return我:
val it = [(("s0l0s1","chi1"),("s1l1s0","chi2"))]
应该是: 如果第一个输入元素的第二个字符串
(string*string*string)
对应第二个输入元素的第一个字符串
(string*string)
那我就把我需要的元素放到列表里,否则我继续检查。
我尝试了很多方法...使用递归函数,使用映射函数...但我是这种语言的新手,我找不到方法,因为 sml 不是易于使用循环处理。
如果您能帮助我,或者即使您有一些建议可以提出,我将不胜感激。
非常感谢大家!
让我知道代码中的解释是否有意义。
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 中调用函数。