add closures
This commit is contained in:
parent
754fbf6c2c
commit
d04f98dedc
3 changed files with 49 additions and 0 deletions
21
examples/closures.talc
Normal file
21
examples/closures.talc
Normal file
|
@ -0,0 +1,21 @@
|
|||
-- adapted from Crafting Interpreters 10.6
|
||||
|
||||
make_counter = \-> do
|
||||
var i = 0
|
||||
\-> do
|
||||
i += 1
|
||||
println(i)
|
||||
end
|
||||
end
|
||||
|
||||
var counter1 = make_counter()
|
||||
counter1() -- 1
|
||||
counter1() -- 2
|
||||
counter1() -- 3
|
||||
counter1() -- 4
|
||||
var counter2 = make_counter()
|
||||
counter2() -- 1
|
||||
counter2() -- 2
|
||||
counter1() -- 5
|
||||
counter1() -- 6
|
||||
counter2() -- 3
|
21
examples/closures2.talc
Normal file
21
examples/closures2.talc
Normal file
|
@ -0,0 +1,21 @@
|
|||
var i = 0;
|
||||
|
||||
var outer = \n -> do
|
||||
var inner = \-> do
|
||||
i = i + n
|
||||
end
|
||||
end
|
||||
|
||||
var by3 = outer(3)
|
||||
var by5 = outer(5)
|
||||
|
||||
by3()
|
||||
println(i) -- 3
|
||||
by3()
|
||||
println(i) -- 6
|
||||
by5()
|
||||
println(i) -- 11
|
||||
by5()
|
||||
println(i) -- 16
|
||||
by3()
|
||||
println(i) -- 19
|
7
examples/totient.talc
Normal file
7
examples/totient.talc
Normal file
|
@ -0,0 +1,7 @@
|
|||
totient = \n -> do
|
||||
count(factors(n)) | pairs | map(\v -> do
|
||||
(v!0)^(v!1) - (v!0)^(v!1 - 1)
|
||||
end) | prod
|
||||
end
|
||||
|
||||
println(totient(6615)) -- 3024
|
Loading…
Reference in a new issue