Nested function: Difference between revisions

Content added Content deleted
(→‎{{header|Lambdatalk}}: adding lambdatalk task)
Line 1,014: Line 1,014:


=={{header|Lambdatalk}}==
=={{header|Lambdatalk}}==
Lambdatalk has neither closures nor states ... outside arrays.
Lambdatalk has neither closures nor states but we can do that, thanks to mutability of arrays behaving as "sandbox" of mutability.
<syntaxhighlight lang="scheme">
<syntaxhighlight lang="scheme">
{def makeItem
{lambda {:c :item}
{div}{A.first {A.set! 0 {+ {A.first :c} 1} :c}}: :item}}
-> makeItem

{def makeList
{def makeList

{def makeItem
{lambda {:s :a :i}
{div}{A.first {A.set! 0 {+ {A.first :a} 1} :a}}:s :i}}

{lambda {:s}
{lambda {:s}
{S.map {{lambda {:c :i} {makeItem :c :i}} {A.new 0}} :s}}}
{S.map {{lambda {:s :a :i} {makeItem :s :a :i}}
:s {A.new 0}}
-> makeList
first second third
}}}
-> makeList


{makeList first second third}
{makeList .}
->
->
1: first
1. first
2: second
2. second
3: third
3. third
</syntaxhighlight>
</syntaxhighlight>