【发布时间】:2016-11-04 16:55:01
【问题描述】:
我的任务是从列表中删除重复项。为此,我必须先对列表进行排序。
我已经编写了对列表进行排序的函数和删除列表的函数 重复(排序后),但我不知道如何组合它们。
例子:
输入:[4;5;2;2;1;3;3]
输出:[1;2;3;4;5]
let rec setify = function
| [] -> []
| x :: l -> insert x (setify l)
and insert elem = function
| [] -> [elem]
| x :: l -> if elem < x then elem :: x :: l
else x :: insert elem l;;
let rec rem =function
|[] -> []
| x :: []-> x :: []
| x :: y :: rest -> if x = y then rem (y :: rest)
else x :: rem (y :: rest) ;;
【问题讨论】:
-
好吧,假设你有一个函数加了十:
let addten x = x + 10和一个函数乘以两个let double x = x * 2。您将如何从这两个函数中创建一个函数,该函数取一个数字,加十,然后将结果乘以二? -
顺便说一句:这是一种奇怪的解决问题的方法。如果你想生成一个没有重复的排序列表,那么你只需说
| x :: l -> if elem < x then elem :: x :: l else if elem = x then x :: l else x :: insert elem l;;- 如果列表中有重复项,则根本不要插入该项目! -
最后:你能让你的插入方法尾递归吗?
标签: ocaml