SML 中的递归函数
Recursive function in SML
我在 SML 上苦苦挣扎,因为我的硕士论文需要它,但我以前从未使用过。
我需要定义一个函数,它将一个元组列表作为输入:
(字符串 * 字符串 * 字符串) 列表
和 return 不同种类元组的列表:
((字符串 * (字符串 * 字符串 * 字符串)) * ((字符串 * 字符串 * 字符串) * 字符串)) 列表
问题是我正在使用递归概念来创建动态列表,但我找不到方法。到目前为止我的代码是:
fun insertRelationLts ((x,y,z),nil) =
let val h=(x,y,z)
in [((x,h),(h,z))]
end
| insertRelationLts ((x,y,z),(a,b,c)::(d,e,f)) =
let val h=(x,y,z)
val q=x
val w=z
in ((q,h),(h,w))::insertRelationLts((a,b,c),(d,e,f))
end
希望有人能帮助我。非常感谢!
cons 运算符 ::
需要右侧的列表,但元组 (d,e,f)
不是一个。也没有理由对其进行模式匹配,因此只需将两次出现的 (d,e,f)
替换为一个变量,它就应该进行类型检查。你也可以稍微简化一下:
fun insertRelationLts (h as (x,y,z), nil) = [((x,h),(h,z))]
| insertRelationLts (h as (x,y,z), t::rest) =
((x,h),(h,z))::insertRelationLts(t, rest)
但是,我建议使用记录或至少使用一些类型缩写以更加清晰。
编辑:实际上,无需显式递归即可更轻松地表达此函数:
fun insertRelationsLts (h, list) =
map (fn h as (x,y,z) => ((x,h), (h,z))) (h::list)
我在 SML 上苦苦挣扎,因为我的硕士论文需要它,但我以前从未使用过。 我需要定义一个函数,它将一个元组列表作为输入: (字符串 * 字符串 * 字符串) 列表
和 return 不同种类元组的列表: ((字符串 * (字符串 * 字符串 * 字符串)) * ((字符串 * 字符串 * 字符串) * 字符串)) 列表
问题是我正在使用递归概念来创建动态列表,但我找不到方法。到目前为止我的代码是:
fun insertRelationLts ((x,y,z),nil) =
let val h=(x,y,z)
in [((x,h),(h,z))]
end
| insertRelationLts ((x,y,z),(a,b,c)::(d,e,f)) =
let val h=(x,y,z)
val q=x
val w=z
in ((q,h),(h,w))::insertRelationLts((a,b,c),(d,e,f))
end
希望有人能帮助我。非常感谢!
cons 运算符 ::
需要右侧的列表,但元组 (d,e,f)
不是一个。也没有理由对其进行模式匹配,因此只需将两次出现的 (d,e,f)
替换为一个变量,它就应该进行类型检查。你也可以稍微简化一下:
fun insertRelationLts (h as (x,y,z), nil) = [((x,h),(h,z))]
| insertRelationLts (h as (x,y,z), t::rest) =
((x,h),(h,z))::insertRelationLts(t, rest)
但是,我建议使用记录或至少使用一些类型缩写以更加清晰。
编辑:实际上,无需显式递归即可更轻松地表达此函数:
fun insertRelationsLts (h, list) =
map (fn h as (x,y,z) => ((x,h), (h,z))) (h::list)