【发布时间】:2015-09-06 22:11:07
【问题描述】:
我正在尝试构建一个将两个类型列表作为输入的函数
(string*string) list
并返回一个相同类型的列表。第一个列表类似于“查找”列表,其中第二个元素是要搜索的元素,第一个元素是要用于替换的元素。该函数的目的是找出第二个列表中的哪个元素等于第一个列表中的哪个元素。如果匹配,第二个列表的元素将替换为第一个元素中元组的对应元素。下面是一个例子:
fun check([("0","s0"),("1","s0l0s1"),("2","s1"),("3","s1l1s0")],[("s0","s0l0s1"),("s0l0s1","s1"),("s1","s1l1s0"),("s1l1s0","s0")]);
使用这些输入,函数应该返回:
val it = [("0","1"),("1","2"),("2","3"),("3","0")]
由于“s0”对应“0”,“s0l0s1”对应“1”,“s1”对应“2”,“s1l1s0”对应“3”。
到目前为止,我已经完成了两个功能:
fun check1((l1 as (x1,y1))::nil,(l2 as (x2,y2))::nil) = if x2 = y1 then [(x1,y2)] else nil
|check1((l1 as (x1,y1))::rest1,(l2 as (x2,y2))::rest2) =
if x2 = y1 then (x1,y2)::check1(rest1,rest2)
else check1(rest1,l2::rest2)
fun check2((l1 as (x1,y1))::nil,(l2 as (x2,y2))::nil) = if y2 = y1 then [(x2,x1)] else nil
|check2((l1 as (x1,y1))::rest1,(l2 as (x2,y2))::rest2) =
if y2 = y1 then (x2,x1)::check2(rest1,rest2)
else check2(rest1,l2::rest2)
第一个函数检查第二个列表的第一个元组的元素,第二个函数检查第二个元组的元素。但它们不能正常工作。有人可以帮助我理解错误在哪里? 非常感谢!
【问题讨论】:
标签: string list find sml substitution