A categorical programming language
Révision | e6929cea3d82f54de43e8eb5a6bdb0904daa130e (tree) |
---|---|
l'heure | 2021-08-18 01:18:12 |
Auteur | Corbin <cds@corb...> |
Commiter | Corbin |
Compile sums to Scheme.
@@ -25,8 +25,8 @@ with open("stub.scm", "r", encoding="utf-8") as handle: | ||
25 | 25 | |
26 | 26 | with open(sys.argv[-2], "r", encoding="utf-8") as handle: |
27 | 27 | program = handle.read().strip() |
28 | - program = program.replace("cons", "cammy-cons") | |
29 | - program = program.replace("map", "cammy-map") | |
28 | + for comb in ("case", "cons", "map"): | |
29 | + program = program.replace(comb, "cammy-" + comb) | |
30 | 30 | print("(define program {})".format(program)) |
31 | 31 | |
32 | 32 | print(""" |
@@ -7,7 +7,8 @@ in pkgs.stdenv.mkDerivation { | ||
7 | 7 | # debugging native code |
8 | 8 | gdb |
9 | 9 | # debugging stub.scm |
10 | - chicken rlwrap | |
10 | + chicken rlwrap ] ++ | |
11 | + (with chickenPackages.chickenEggs; [ srfi-189 ]) ++ [ | |
11 | 12 | # maintaining frame/ |
12 | 13 | ocamlformat |
13 | 14 | # debugging stub.ml |
@@ -1,7 +1,5 @@ | ||
1 | -(import (srfi 6)) | |
2 | -(import (chicken condition)) | |
3 | -(import (chicken format)) | |
4 | -(import (chicken string)) | |
1 | +(import (srfi 6) (srfi 189)) | |
2 | +(import (chicken condition) (chicken format) (chicken string)) | |
5 | 3 | |
6 | 4 | (define id (lambda (x) x)) |
7 | 5 | (define (comp f g) (lambda (x) (g (f x)))) |
@@ -14,6 +12,8 @@ | ||
14 | 12 | |
15 | 13 | (define swap (lambda (x) (cons (cdr x) (car x)))) |
16 | 14 | |
15 | +(define (cammy-case f g) (lambda (x) (either-ref x f g))) | |
16 | + | |
17 | 17 | (define (curry f) (lambda (x) (lambda (y) (f (cons x y))))) |
18 | 18 | (define (uncurry f) (lambda (xy) ((f (car xy)) (cdr xy)))) |
19 | 19 | (define app (lambda (fx) ((car fx) (cdr fx)))) |