如何在 SML/NJ 中编写一个函数,将列表中的元素排序为等价的 类?
How to write a function in SML/NJ that sorts the elements from a list into equivalence classes?
我必须在 SML/NJ 中编写一个函数,将列表中的元素排序为等价的 classes。每个等价项 class 中的元素顺序应与原始列表中的顺序相同。等价关系由函数 f 给出,如果两个元素等价,则 returns 为真。
该函数应如下所示:
fun equivalenceClasses (f: ''a * ''a -> bool, xs: ''a list): ''a list list
我只能使用匿名函数和结构 List、ListPair 和 Math。
我不知道该怎么做。有人可以帮我吗?
假设我给了你一个等价列表类。你能想出如何在该列表中再插入一个元素吗?
例如,假设元素是字符串,等价物类是等长的字符串。那么列表 [["fox","the","dog"],["brown","jumps"],["over","lazy"]]
是一个等价列表 类,因为例如"fox"
与"dog"
等长,"brown"
与"jumps"
等等
如果我们现在将字符串 "quick"
插入到 类 的列表中,结果应该是什么样的?显然它应该被添加到列表 ["brown","jumps"]
,所以结果可能看起来像 [["fox","the","dog"],["quick","brown","jumps"],["over","lazy"]]
一旦你解决了这个问题,剩下的就很简单了。这里有一个提示:
fun equivalenceClasses (f, xs) =
case xs of
[] => ???
| x :: xs' => let
val c = equivalenceClasses xs'
in
???
end
我必须在 SML/NJ 中编写一个函数,将列表中的元素排序为等价的 classes。每个等价项 class 中的元素顺序应与原始列表中的顺序相同。等价关系由函数 f 给出,如果两个元素等价,则 returns 为真。
该函数应如下所示:
fun equivalenceClasses (f: ''a * ''a -> bool, xs: ''a list): ''a list list
我只能使用匿名函数和结构 List、ListPair 和 Math。
我不知道该怎么做。有人可以帮我吗?
假设我给了你一个等价列表类。你能想出如何在该列表中再插入一个元素吗?
例如,假设元素是字符串,等价物类是等长的字符串。那么列表 [["fox","the","dog"],["brown","jumps"],["over","lazy"]]
是一个等价列表 类,因为例如"fox"
与"dog"
等长,"brown"
与"jumps"
等等
如果我们现在将字符串 "quick"
插入到 类 的列表中,结果应该是什么样的?显然它应该被添加到列表 ["brown","jumps"]
,所以结果可能看起来像 [["fox","the","dog"],["quick","brown","jumps"],["over","lazy"]]
一旦你解决了这个问题,剩下的就很简单了。这里有一个提示:
fun equivalenceClasses (f, xs) =
case xs of
[] => ???
| x :: xs' => let
val c = equivalenceClasses xs'
in
???
end