curry gotcha
[cc1516.git] / examples / factorize.spl
1 reverse (list) :: [Int] -> [Int] {
2 var accu = [];
3 while (! isEmpty (list)) {
4 accu = list . hd : accu;
5 list = list . tl;
6 }
7 return accu;
8 }
9
10 coPrimeWith (elem, list) :: Int -> [Int] -> Bool {
11 if (isEmpty(list)) {
12 return True;
13 } else {
14 if (elem % list.hd == 0) {
15 return False;
16 } else {
17 return coPrimeWith(elem, list.tl);
18 }
19 }
20 }
21
22 factorize (n) :: Int -> [Int] {
23 var primes = [];
24 var i = 2;
25 while (i < n) {
26 if (n % i == 0 && coPrimeWith(i, primes)) {
27 print("Found prime: ", i);
28 primes = i : primes;
29 }
30 i = i + 1;
31 }
32 return primes;q
33 }
34
35 print_list_inner (list) :: [Int] -> Void {
36 if (isEmpty(list)) {
37 return;
38 } else {
39 print(list.hd);
40 if (!isEmpty(list.tl)) {
41 print(',');
42 print(' ');
43 }
44 return print_list_inner(list.tl);
45 }
46 }
47
48 print_list (list) :: [Int] -> Void {
49 print('[');
50 print_list_inner(list);
51 print(']');
52 print('
53 ');
54 return;
55 }
56
57 main (){
58 //var number = 692963517;
59 var number = 12000;
60 var result = reverse(factorize(number));
61 print_list(result);
62 return;
63 }