# Sorting list numerically in Cadence SKILL Language

Status
Not open for further replies.

#### pancho_hideboo

a = '(11 9 11 8 7 9 12 1 0 -5 11 6 7)

I want to sort above list, a and then generate new list, b.

b = '(-5 0 1 6 7 7 8 9 9 11 11 11 12)

And I want to remove duplicate elements and then generate new list, c

c = '(-5 0 1 6 7 8 9 11 12)

How can I do these tasks elegantly in Cadence SKILL Language ?

"sort(a, nil)" is not valid.

I can do these tasks for list very easily in Microsoft .NET enviroment by invoking sort method and association list, e.g. "hash table"or "dictionary".

#### pancho_hideboo

Self follow.
Code:
procedure( list_sort(l_list,
@optional (my_mode 0), (rm_duplicate 0)
); list_sort
prog( (k, ii, jj, n, p, my_value)
n = length(l_list)

declare(p[n])
for(k, 0, n-1
p[k] = nth(k, l_list)
); for

for(ii, 0, n-2
my_value = p[ii]
k = ii
for(jj, ii+1, n-1
prog( ()
if(my_mode == 0 then
when( my_value < p[jj], return() ) ; ascend
else
when( my_value > p[jj], return() ) ; descend
); if
my_value = p[jj]
k = jj
); prog
); for
p[k] = p[ii]
p[ii] = my_value
); for

my_value = p[0]
l_list = list(my_value)
for(k, 1, n-1
if(rm_duplicate != 0 then
when(p[k] != my_value
my_value = p[k]
l_list = append1(l_list, my_value)
); when
else
l_list = append1(l_list, p[i])
); if
); for
return(l_list)
); prog
); procedure
\i list_sort('(2 11 11 11 10 10 9 9 4 0 -1), 0)
\t (-1 0 2 4 9
\t 9 10 10 11 11
\t 11
\t )
\p >
\i list_sort('(2 11 11 11 10 10 9 9 4 0 -1), 0, 1)
\t (-1 0 2 4 9
\t 10 11
\t )
\p >
\i list_sort('(2 11 11 11 10 10 9 9 4 0 -1), 1)
\t (11 11 11 10 10
\t 9 9 4 2 0
\t -1
\t )
\p >
\i list_sort('(2 11 11 11 10 10 9 9 4 0 -1), 1, 1)
\t (11 10 9 4 2
\t 0 -1
\t )

Status
Not open for further replies.