A categorical programming language
修订版 | 9874abe37efb128d50beb15094374b5e144a39bb (tree) |
---|---|
时间 | 2021-08-09 05:51:52 |
作者 | Corbin <cds@corb...> |
Commiter | Corbin |
Require nats to be positive.
@@ -5,7 +5,7 @@ import sys | ||
5 | 5 | parsers = { |
6 | 6 | "unit": "string->unit", |
7 | 7 | "bool": "string->boolean", |
8 | - "nat": "string->number", | |
8 | + "nat": "string->nat", | |
9 | 9 | "nat * nat": "string->int", |
10 | 10 | } |
11 | 11 |
@@ -1,3 +1,5 @@ | ||
1 | +(import (chicken condition)) | |
2 | + | |
1 | 3 | (define id (lambda (x) x)) |
2 | 4 | (define (comp f g) (lambda (x) (g (f x)))) |
3 | 5 |
@@ -30,6 +32,10 @@ | ||
30 | 32 | |
31 | 33 | (define (string->unit s) '()) |
32 | 34 | (define (string->boolean s) (equal? s "true")) |
35 | +(define (string->nat s) | |
36 | + (let ((i (string->number s))) | |
37 | + (if (< i 0) (signal (condition '(exn message "nats must be positive"))) | |
38 | + i))) | |
33 | 39 | (define (string->int s) |
34 | 40 | (let ((i (string->number s))) (if (< i 0) (cons 0 (abs i)) (cons i 0)))) |
35 | 41 | (define (fold-left kn kc l) (if (null? l) kn (kc (car l) (fold-left kn kc (cdr l))))) |