Hi all, I'm a big fan of contract programming and was wondering if there's any SRFI or library that offers this in Guile?
Here's an example of what I mean by contract: -------------------------------------------------------------------------------- ;; Given (define (sum x y z) "Return the sum of X, Y and Z." (#:pre-conditions (>= x 0) (>= y 0) (>= z 0)) (#:post-conditions (>= result 0)) (+ x y z)) ;; Would expand to something like (use-modules (ice-9 local-eval)) (define (sum x y z) " Return the sum of X, Y, and Z. pre-conditions: (>= x 0) (>= y 0) (>= z 0) post-conditions: (>= result 0) " (for-each (lambda (condition) (unless (local-eval condition (the-environment)) (begin (format #t "Failed pre-condition: ~a\n" condition) (exit 1)))) '((>= x 0) (>= y 0) (>= z 0))) (let ((result (begin (+ x y z)))) (for-each (lambda (condition) (unless (local-eval condition (the-environment)) (begin (format #t "Failed post-condition: ~a\n" condition) (exit 1)))) '((>= result 0))) result)) -------------------------------------------------------------------------------- -- Olivier Dion PolyMtl