我試圖寫在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