我试图写在SML一个函数,它给出的一般元素的列表时,重新排序其元素为等价类,并返回这些类(类型“列表,列表)的列表。 离开在相同的顺序类的元素以原始列表。 给定函数定义的元素的等价,如果元素是等价的或否则为false返回true。 我似乎无法得到解决一握。分区列表为等价类
fun sample x y = x = y
所需类型:FN:( '' 一 - > '' 一 - > BOOL) - > '' 的列表 - > '' 列表列表
非常感谢您的帮助。
助手功能不能正常工作,所有我想用它做的是看看给定元素属于任何类,并把它内。因此或创建一个包含一个新的子表。当由11
测试划分
fun srt listoflists func new =
case listoflists of [] => [[]]
| a::b => if func (new, hd a) = true then (new::a)::b
else if func (new, hd a) = false then a::(srt b func new) else [new]::a::b
样品功能检查两个元件的等价是不是所有的工作,它不加入17进入一个新的类。
srt [[7,7,7],[5,5,5],[11,11,11],[13,13,13]] eq 7;
val it = [[7,7,7,7],[5,5,5],[11,11,11],[13,13,13]] : int list list
- srt [[7,7,7],[5,5,5],[11,11,11],[13,13,13]] eq 5;
val it = [[7,7,7],[5,5,5,5],[11,11,11],[13,13,13]] : int list list
- srt [[7,7,7],[5,5,5],[11,11,11],[13,13,13]] eq 11;
val it = [[7,7,7],[5,5,5],[11,11,11,11],[13,13,13]] : int list list
- srt [[7,7,7],[5,5,5],[11,11,11],[13,13,13]] eq 13;
val it = [[7,7,7],[5,5,5],[11,11,11],[13,13,13,13]] : int list list
- srt [[7,7,7],[5,5,5],[11,11,11],[13,13,13]] eq 17;
val it = [[7,7,7],[5,5,5],[11,11,11],[13,13,13],[]] : int list list
- srt [[7,7,7],[5,5,5],[11,11,11],[13,13,13],[111,111,111]] eq 111;
val it = [[7,7,7],[5,5,5],[11,11,11],[13,13,13],[111,111,111,111]]
如何纠正这一点,也曾经这个辅助功能的工作原理,如何准确encorporate成所需的主要功能。
非常感谢。
您能否提供一些输入和期望输出的具体示例列表? –
你可以从编写一个帮助器函数开始,该函数接受一个列表和一个新元素以及布尔值函数,并且将新元素附加到列表中的适当列表(如果它是相当于其中一个列表中的元素),或者启动一个仅包含该项目的新列表,并将此新列表添加到列表列表中。为了提高效率,将新项目附加到列表的* front *中,并在返回列表之前使整个函数反转列表(使用内置的“rev”)。 –
谢谢约翰。我试图想出一个帮助函数的解决方案,但它不能正常工作。 – user911