forked from exercism/lfe
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample.lfe
29 lines (25 loc) · 847 Bytes
/
example.lfe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(defmodule roman-numerals
(export (roman 1))
)
(defun numerals () '(("I" "V" "X")
("X" "L" "C")
("C" "D" "M")
("M" "" ""))
)
(defun roman (value) (conv value "" (numerals)))
(defun conv
((_remaining acc []) acc)
((remaining acc (cons (list ones fives tens) next)) (conv (div remaining 10) (++ (roman-digit (rem remaining 10) ones fives tens) acc) next))
)
(defun roman-digit
((0 _ones _fives _tens) "")
((1 ones _fives tens) ones)
((2 ones _fives tens) (++ ones ones))
((3 ones _fives _tens) (++ ones ones ones))
((4 ones fives _tens) (++ ones fives))
((5 _ones fives _tens) fives)
((6 ones fives _tens) (++ fives ones))
((7 ones fives _tens) (++ fives ones ones))
((8 ones fives _tens) (++ fives ones ones ones))
((9 ones _fives tens) (++ ones tens))
)