Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % <LList T> ::= lNil | lCons(T ({} -> <LList T>))
- declare fun {LIter F X} lCons(X fun {$}{LIter F {F X}} end) end
- declare fun {LFrom K}{LIter fun {$ N} N+1 end K} end
- declare
- fun {LTake N LL}
- case N#LL
- of 0#_ then nil
- [] _#lNil then nil
- [] M#lCons(X LT) then X|{LTake M-1 {LT}}
- end
- end
- declare BST=node("ekran"#"screen"
- node("adapter"#"adapter"
- empty
- node("klawiatura"#"keyboard"
- empty
- empty
- )
- )
- node("komputer"#"computer"
- empty
- node("mysz"#"mouse"
- empty
- empty
- )
- )
- )
- fun {Switch BT}
- case BT of
- empty then empty
- [] node(V1#V2 L R) then node(V2#V1 {Switch L} {Switch R})
- end
- end
- {Inspect {Switch BST}}
- fun {Fibonacci}
- local
- fun {Fib A#B}
- lCons(A fun {$}{Fib A+B#A} end)
- end
- in {Fib 0#1}
- end
- end
- {Browse {LTake 6 {Fibonacci}}}
- declare
- fun {LDivide LL}
- local
- fun {Divide LL Mod W}
- case LL
- of lNil then lNil
- [] lCons(X LT) then
- case W
- of true then if X mod Mod == 0 then {Divide {LT} Mod W} else
- lCons(X fun{$}{Divide {LT} Mod W}end)end
- [] false then if X mod Mod == 0 then lCons(X fun{$}{Divide {LT} Mod W}end) else
- {Divide {LT} Mod W} end
- end
- end
- end
- in{Divide LL 3 false}#{Divide LL 3 true}
- end
- end
- declare
- fun {LTakePair LL1#LL2 N1 N2}
- {LTake N1 LL1}#{LTake N2 LL2}
- end
- {Browse {LTakePair {LDivide {LFrom 1}} 7 7}}
- declare
- fun {LFoldL LL F Acc N}
- case LL#N
- of _#0 then Acc
- [] lNil#_ then Acc
- [] lCons(X LT)#_ then {LFoldL {LT} F {F Acc X} (N-1)}
- end
- end
- {Browse {LFoldL {Fibonacci} fun{$Acc X} Acc+X end 0 5}}
Add Comment
Please, Sign In to add comment