Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # fun fact(n :: Number) -> Number:
- # fun help(shadow n :: Number, acc :: Number) -> Number:
- # if n == 0:
- # acc
- # else:
- # help(n - 1, acc * n)
- # end
- # end
- # help(n, 1)
- # where:
- # fact(0) is 1
- # fact(5) is 120
- # end
- # fun len(l, acc):
- # cases (List) l:
- # | empty => acc
- # | link(_, r) => len(r, 1 + acc)
- # end
- # where:
- # len(empty, 0) is 0
- # len(range(0, 10), 0) is 10
- # end
- data Test:
- | zero
- | one(e :: Test, n :: Number)
- | two(e :: Test, n :: Number)
- | three(e :: Test, n :: Number)
- end
- fun f<a>(t :: Test) -> Number:
- rec help = lam(shadow t :: Test, acc :: Number) -> Number:
- cases (Test) t:
- | zero => acc
- | one(e, n) =>
- var to-add = n
- when num-modulo(n, 2) == 0:
- to-add := 0 - to-add
- end
- help(e, acc + to-add)
- | two(e, n) =>
- to-add =
- if num-modulo(n, 2) == 0:
- 0 - n
- else:
- n
- end
- help(e, acc + to-add)
- | three(e, n) =>
- help(e, acc + if num-modulo(n, 2) == 0: 0 - n else: n end)
- end
- end
- help(t, 0)
- where:
- f(zero) is 0
- f(one(two(one(two(three(three(one(two(three(one(three(one(two(three(zero, 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14))
- is (1 + 3 + 5 + 7 + 9 + 11 + 13) - (2 + 4 + 6 + 8 + 10 + 12 + 14)
- end
- #
- # fun triangle(n :: Number) -> Number:
- # fun help(shadow n :: Number, acc :: Number) -> Number:
- # if n == 0:
- # acc
- # else:
- # help(n - 1, acc + n)
- # end
- # end
- # help(n, 0)
- # where:
- # triangle(0) is 0
- # triangle(10) is 55
- # end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement