コーディング合宿
部のコーディング合宿に行ってきた。2泊3日でひたすらコーディングするという合宿。
なぞの言語処理系ができた。
こんな感じの言語。//または全角スペースがコメントの開始記号(Shift-JIS限定)。
// gm sample print("Hello, World!"); print("// // //\n"); THE COMMENT☆ def fib = #(n) { // fib if (n <= 1) { 1; } else { fib(n - 1) + fib(n - 2); }; }; print("fib(10) = ", fib(10)); print(); ?で終わる識別子 def zero? = #(n) { n == 0; }; print(zero?(3)); 代入とかラムダ式とか def x = 3; print(x); x = 10; print(x); print(#(a) { a * a; } (x)); set!(x, 20); print(x); print(); 配列操作とか ループは再帰で。 def v1 = [1, 3, 5, 7, 9, 11]; print("v1 = ", v1); print("v1[1 + 2] = ", v1[1 + 2]); def show-array = #(array, x, y) { if (x < y) { print(x, ": ", array[x]); show-array(array, x+1, y); }; }; show-array(v1, 0, 6); def double-array = #(array, x, y) { if (x < y) { array[x] = array[x] * 2; double-array(array, x+1, y); }; }; double-array(v1, 0, 6); print(v1); print(); 素数生成 def primes = make-vector(100, 1); def seive = #(i) { def iter = #(j) { if (j < vector-length(primes)) { primes[j] = 0; iter(j + i); }; }; if (i < 100) { if (primes[i] == 1) { iter(i+i); }; seive(i+1); }; }; def show-primes = #(i) { if (i < vector-length(primes)) { if (primes[i] == 1) { print(i); }; show-primes(i+1); }; }; seive(2); print("primes in [2..100]"); show-primes(2); print();
出力は
Hello, World! // // // fib(10) = 89 #f 3 10 100 20 v1 = #(1 3 5 7 9 11) v1[1 + 2] = 7 0: 1 1: 3 2: 5 3: 7 4: 9 5: 11 #(2 6 10 14 18 22) primes in [2..100] 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97