Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Sorting list numerically in Cadence SKILL Language

Status
Not open for further replies.

pancho_hideboo

Advanced Member level 5
Joined
Oct 21, 2006
Messages
2,847
Helped
767
Reputation
1,536
Reaction score
733
Trophy points
1,393
Location
Real Homeless
Activity points
17,490
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".
 

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.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top