Topological sort: Difference between revisions
Content added Content deleted
m (→{{header|Haskell}}: Used Data.Bifunctor in place of Control.Arrow) |
No edit summary |
||
Line 3,339: | Line 3,339: | ||
[des_system_lib, dw03, dw04] |
[des_system_lib, dw03, dw04] |
||
] |
] |
||
</pre> |
|||
=={{header|M2000 Interpreter}}== |
|||
<lang M2000 Interpreter>Module testthis { |
|||
\\ empty stack |
|||
Flush |
|||
inventory LL |
|||
append LL, "des_system_lib":=(List:="std", "synopsys", "std_cell_lib", "des_system_lib", "dw02", "dw01", "ramlib", "ieee") |
|||
REM append LL, "dw01":=(List:="dw04","ieee", "dw01", "dware", "gtech") |
|||
append LL, "dw01":=(List:="ieee", "dw01", "dware", "gtech") |
|||
append LL, "dw02":=(List:="ieee", "dw02", "dware") |
|||
append LL, "dw03":=(List:="std", "synopsys", "dware", "dw03", "dw02", "dw01", "ieee", "gtech") |
|||
append LL, "dw04":=(List:= "ieee", "dw01", "dware", "gtech") |
|||
append LL, "dw05":=(List:="dw05", "ieee", "dware") |
|||
append LL, "dw06":=(List:="dw06", "ieee", "dware") |
|||
append LL, "dw07":=(List:="ieee", "dware") |
|||
append LL, "dware":=(List:="ieee", "dware") |
|||
append LL, "gtech":=(List:="ieee", "gtech") |
|||
append LL, "ramlib":=(List:="std", "ieee") |
|||
append LL, "std_cell_lib":=(List:="ieee", "std_cell_lib") |
|||
append LL, "synopsys":=List |
|||
\\ inventory itmes may have keys/items or keys. |
|||
\\ here we have keys so keys return as item also |
|||
\\ when we place an item in a key (an empty string) ... |
|||
\\ we mark the item to not return the key but an empty string |
|||
inventory final |
|||
mm=each(LL) |
|||
while mm |
|||
k$=eval$(mm!) |
|||
m=eval(mm) |
|||
mmm=each(m) |
|||
While mmm |
|||
k1$=eval$(mmm!) |
|||
if not exist(LL, k1$) then |
|||
if not exist(final, k1$) then append final, k1$ |
|||
return m, k1$:="" \\ mark that item |
|||
else |
|||
mmmm=Eval(LL) |
|||
if len(mmmm)=0 then |
|||
if not exist(final, k1$) then append final, k1$ |
|||
return m, k1$:="" \\ mark that item |
|||
end if |
|||
end if |
|||
end while |
|||
end while |
|||
mm=each(LL) |
|||
while mm |
|||
\\ using eval$(mm!) we read the key as string |
|||
k$=eval$(mm!) |
|||
if exist(final, k$) then continue |
|||
m=eval(mm) |
|||
mmm=each(m) |
|||
While mmm |
|||
\\ we read the item, if no item exist we get the key |
|||
k1$=eval$(mmm) |
|||
if k1$="" then continue |
|||
if exist(final, k1$) then continue |
|||
data k1$ \\ push to end to stack |
|||
end while |
|||
while not empty |
|||
read k1$ |
|||
if exist(final, k1$) then continue |
|||
m=LL(k1$) |
|||
mmm=each(m) |
|||
delthis=0 |
|||
While mmm |
|||
k2$=eval$(mmm) |
|||
if k2$="" then continue |
|||
if k1$=k2$ then continue |
|||
if exist(final, k2$) then continue |
|||
push k2$ \\ push to end to stack |
|||
return m, k2$:="" |
|||
delthis++ |
|||
end while |
|||
if delthis=0 then |
|||
if not exist(final, k1$) then |
|||
mmm=each(m) |
|||
While mmm |
|||
k2$=eval$(mmm!) |
|||
if k2$=k1$ then continue |
|||
if exist(final, k2$) Else |
|||
Print "unsorted:";k1$, k2$ |
|||
end if |
|||
end while |
|||
append final, k1$ : Return LL, k1$:=List |
|||
end if |
|||
end if |
|||
end while |
|||
if not exist(final, k$) then append final, k$ |
|||
end while |
|||
document doc$ |
|||
ret=each(final,1, -2) |
|||
while ret |
|||
doc$=eval$(ret)+" -> " |
|||
end while |
|||
doc$=final$(len(final)-1!) |
|||
Report doc$ |
|||
clipboard doc$ |
|||
} |
|||
testthis |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
std -> synopsys -> ieee -> std_cell_lib -> ramlib -> gtech -> dware -> dw02 -> dw01 -> des_system_lib -> dw03 -> dw04 -> dw05 -> dw06 -> dw07 |
|||
</pre> |
</pre> |
||
=={{header|Mathematica}}== |
=={{header|Mathematica}}== |