Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
44
Task/Happy-numbers/Oz/happy-numbers.oz
Normal file
44
Task/Happy-numbers/Oz/happy-numbers.oz
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
functor
|
||||
import
|
||||
System
|
||||
define
|
||||
fun {IsHappy N}
|
||||
{IsHappy2 N nil}
|
||||
end
|
||||
|
||||
fun {IsHappy2 N Seen}
|
||||
if N == 1 then true
|
||||
elseif {Member N Seen} then false
|
||||
else
|
||||
Next = {Sum {Map {Digits N} Square}}
|
||||
in
|
||||
{IsHappy2 Next N|Seen}
|
||||
end
|
||||
end
|
||||
|
||||
fun {Sum Xs}
|
||||
{FoldL Xs Number.'+' 0}
|
||||
end
|
||||
|
||||
fun {Digits N}
|
||||
{Map {Int.toString N} fun {$ D} D - &0 end}
|
||||
end
|
||||
|
||||
fun {Square N} N*N end
|
||||
|
||||
fun lazy {Nat I}
|
||||
I|{Nat I+1}
|
||||
end
|
||||
|
||||
%% List.filter is eager. But we need a lazy Filter:
|
||||
fun lazy {LFilter Xs P}
|
||||
case Xs of X|Xr andthen {P X} then X|{LFilter Xr P}
|
||||
[] _|Xr then {LFilter Xr P}
|
||||
[] nil then nil
|
||||
end
|
||||
end
|
||||
|
||||
HappyNumbers = {LFilter {Nat 1} IsHappy}
|
||||
in
|
||||
{System.show {List.take HappyNumbers 8}}
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue