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 中调用函数。