在sml中,我们通过l :: ls将整数或字符串列表定义为参数,这有助于我们定义任意长度的列表,然后我们可以与=或>进行比较。或者<。我们怎样才能以类似的方式表示元组? 例如 我可以写,
fun delete(x,l::ls)=if x=l then delete(x,ls) else l::delete(x,ls)
我怎样才能为元组编写类似的内容?
注意,我甚至需要比较元组的各个元素:ie(a1,b1)>(a2,b2)如果b1> b2,那么一些只能像上面那样删除的排序将是不够的。
谢谢你。
答案 0 :(得分:1)
您可以使用常用格式(x, y)
直接在元组上进行模式匹配。
您的delete
函数适用于任何'a list
,因此对于元组列表也是正确的。下面是一个基于元组中第一个值过滤列表的示例:
fun deleteByFirst(x0, []) = []
| deleteByFirst(x0, (x, y)::ls) =
if x = x0
then deleteByFirst(x0, ls)
else (x, y)::deleteByFirst(x0, ls)