Stable sorting means the ordering of equals should not be changed after 
sorting is done.
For instance, if we sort the following list according to parity (0 < 1):

[3,2,5,4,1,6]

we should get: [2,4,6,3,5,1]

In the mergesort implementation you referred to, list_reverse needs to be 
called to ensure sorting
done is actually stable sorting. Without list_reverse, the ordering among 
some equals is reversed.

On Tuesday, June 3, 2025 at 7:31:48 PM UTC-4 jin wrote:

> thanks a lot, in my understand, the function under a function can use its 
> father's type and without convert to templates, and can you explain more 
> about why there is a make sort stable commet at the second picture which is 
> the code in the book i download from ats lang web
>
> 在2025年6月4日星期三 UTC+8 06:53:07<gmhwxi> 写道:
>
>> For instance, I see the following kind of recursive templates very often:
>>
>> fun{a:t@ype}
>> list0_length(xs: list0(a)): int =
>> case+ xs of
>> | list0_nil() => 0
>> | list0_cons(x1, xs) => 1 + list0_length<a>(xs)
>>
>> This kind of code may be working, but should be avoided. Instead,
>> one can replace it with the following code:
>>
>> fun{a:t@ype}
>> list0_length(xs: list0(a)): int =
>> length(xs) where
>> {
>> fun length(xs: list0(a)): int =
>> case+ xs of
>> | list0_nil() => 0
>> | list0_cons(_, xs) => 1 + length(xs)
>> }
>>
>> BTW, recursive templates, by default, are not supported in ATS3.
>>
>> On Tuesday, June 3, 2025 at 6:45:35 PM UTC-4 gmhwxi wrote:
>>
>>>
>>> I see that you wrote some ATS2 code.
>>>
>>> Unfortunately, there is not much written documentation on ATS2 (or ATS 
>>> in general).
>>> It is often difficult for one to immediately figure out how various 
>>> features in ATS2 should
>>> be used.
>>>
>>> In your code, you have some recursive templates (e.g., your template 
>>> list0RevHelper is
>>> recursive).
>>>
>>> In general, templates should *not* be recursive. In this case, 
>>> list0RevHelper does not need
>>> to be a template in the first place. Just turn it into an ordinary 
>>> (recursive) function. Then I believe
>>> your problem will go away.
>>>
>>> --Hongwei
>>>
>>>
>>>
>>> On Monday, June 2, 2025 at 8:23:32 PM UTC-4 jin wrote:
>>>
>>>> when i t[image: 2025-06-03 07.57.11.png]ry to use list0_rev 
>>>> (list0_tail (listo_rev lista)) as initlist function, there notice segment 
>>>> default at runtime, so i change function to the picture below, error 
>>>> disappear, i want to know what cause the error, is there any relation 
>>>> between the error and the "make stable" of the second picture, which seems 
>>>> like not nessesary, that's really confuse[image: 2025-06-03 
>>>> 07.57.11.png]
>>>> [image: 2025-06-03 08.02.32.png][image: 2025-06-03 07.57.11.png]
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/ats-lang-users/75f9e7ea-8cf1-47e6-b67a-9506bfdb7860n%40googlegroups.com.

Reply via email to