summaryrefslogtreecommitdiff
path: root/vikalpa.scm
diff options
context:
space:
mode:
Diffstat (limited to 'vikalpa.scm')
-rw-r--r--vikalpa.scm58
1 files changed, 35 insertions, 23 deletions
diff --git a/vikalpa.scm b/vikalpa.scm
index f45a571..671082a 100644
--- a/vikalpa.scm
+++ b/vikalpa.scm
@@ -280,17 +280,16 @@
(mat-preconds
(cdr rlps)
(let search ((ps preconds))
- (when (equal? rl '(rule (x y) ((natural? y) (natural? x)) (quote #t) (natural? (+ x y))))
- (format #t "search~% rl: ~s~% rlps: ~s~% ps: ~s~% env: ~s~%" rl rlps ps (cdr k+env)))
(if (null? ps)
- ((car k+env) #f)
+ (shift k ((car k+env) #f))
(let ((env (mat-begin (car rlps) (car ps) (cdr k+env))))
(cond
((mat-begin (car rlps) (car ps) (cdr k+env))
=> (lambda (env)
(shift k0
- (reset (or (shift k (k0 (cons k env)))
- (k0 (search (cdr ps))))))))
+ (reset
+ (or (shift k (k0 (cons k env)))
+ (k0 (search (cdr ps))))))))
(else (search (cdr ps))))))))))
(define (valid? env expr)
(cond ((expr-quoted? expr) #t)
@@ -847,7 +846,6 @@
(else
(fail 'apply-theorem cmd expr)))))
-;; (rewrite system? rewriter? expression? procedure?) -> expr
(define (rewrite1 sys expr fail r)
(let* ((cmd (rewriter-command r))
(cmd/name (command-name cmd)))
@@ -861,7 +859,19 @@
(('equal? `(quote ,x) `(quote ,y))
(expr-quote (equal? x y)))
(else
- (fail 'equal? 'extracted-expr))))
+ (fail 'equal? extracted-expr))))
+ ((eq? 'pair? cmd/name)
+ (match extracted-expr
+ (('pair? `(quote ,x))
+ (expr-quote (pair? x)))
+ (else
+ (fail 'pair? extracted-expr))))
+ ((eq? 'not cmd/name)
+ (match extracted-expr
+ (('not `(quote ,x))
+ (expr-quote (not x)))
+ (else
+ (fail 'not extracted-expr))))
((eq? 'error cmd/name) (fail extracted-expr))
((and (symbol? cmd/name)
(lookup cmd/name sys))
@@ -879,21 +889,19 @@
(fail 'invalid-command cmd extracted-expr)))))
(else (fail 'command-not-found cmd extracted-expr)))))))
-(define/guard (rewrite (sys system?) (expr expression?) (seq sequence?))
- (debug "rewrite ~y~%" expr)
- (let loop ((expr expr)
- (seq seq))
- (debug "~y~%" expr)
- #;(format #t "~y~%" expr)
- (reset
- (if (null? seq)
- expr
- (loop (rewrite1 sys
- expr
- (lambda args
- (shift k (cons 'error args)))
- (car seq))
- (cdr seq))))))
+(define/guard (rewrite (sys system?) (expr (const #t)) (seq sequence?))
+ (let ((expr (convert-to-expression expr)))
+ (let loop ((expr expr)
+ (seq seq))
+ (reset
+ (if (null? seq)
+ expr
+ (loop (rewrite1 sys
+ expr
+ (lambda args
+ (shift k (cons 'error args)))
+ (car seq))
+ (cdr seq)))))))
(define (expr-not x)
(list 'not x))
@@ -928,7 +936,10 @@
(expression->rules vars
(cons (prop-not (if-form-test expr))
preconds)
- (if-form-else expr)))
+ (if-form-else expr))
+ (expression->rules vars
+ preconds
+ (if-form-test expr)))
(if (expr-equal? expr)
(list (rule vars
preconds
@@ -1063,6 +1074,7 @@
(parameterize ((current-system parent))
(define-primitive-function not (x))
(define-primitive-function equal? (x y))
+ (define-primitive-function pair? (x y))
(define-primitive-function cons (x y))
(define-primitive-function car (x))
(define-primitive-function cdr (x))