Flatten a list: Difference between revisions

→‎{{header|Factor}}: Use a library word. Also, lists here are interpreted as sequences as said in the wikipedia definition
(→‎{{header|Factor}}: Use a library word. Also, lists here are interpreted as sequences as said in the wikipedia definition)
Line 200:
 
=={{header|Factor}}==
USE: sequences.deep
{{trans|Common Lisp}}
( scratchpad ) { { 1 } 2 { { 3 4 } 5 } { { { } } } { { { 6 } } } 7 8 { } } deep-array>list flatten list>array .
<lang factor>: (flatten) ( accum tree -- accum' )
dup{ nil?1 [2 drop3 ]4 [5 6 7 8 }
[ dup list? [ (flatten) ] [ swons ] if ] leach
] if ;
 
: flatten ( tree -- list )
nil swap (flatten) lreverse ;</lang>
 
Factor has no nice syntax for lists, so I'll define this helper word and print some arrays.
<lang factor>: deep-array>list ( seq -- list )
[ dup array? [ deep-array>list ] when ] map sequence>list ;</lang>
 
{ { 1 } 2 { { 3 4 } 5 } { { { } } } 7 8 { } } deep-array>list flatten list>array .
{ 1 2 3 4 5 7 8 }
 
=={{header|Groovy}}==
Anonymous user