Skip to content

Instantly share code, notes, and snippets.

@SaitoAtsushi
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SaitoAtsushi/5e47c3562e0ac7ccc9b0 to your computer and use it in GitHub Desktop.
Save SaitoAtsushi/5e47c3562e0ac7ccc9b0 to your computer and use it in GitHub Desktop.
Error sample for Sagittarius 0.6.6
(define-library (pandoric)
(export define-pandoric-procedure pandoric-ref pandoric-set!)
(import (scheme base))
(begin
(define-syntax flag-a (syntax-rules ()))
(define-syntax flag-m (syntax-rules ()))
(define-syntax %dpp
(syntax-rules ()
((_ name (var ...) (form ...) () ()
(a ...) (m ...) args body0 body1 ...)
(begin
(define-values
(a ... m ... temp)
(let ((var form) ...)
(values
(lambda() var) ...
(lambda(n) (set! var n)) ...
(lambda args body0 body1 ...))))
(define-syntax name
(syntax-rules (flag-a flag-m var ...)
((_ flag-a var) a) ...
((_ flag-m var) m) ...
((_ . n) (temp . n))))))
((_ name (var ...) (form ...) (v vs ...) (f fs ...)
(a ...) (m ...) args body0 body1 ...)
(%dpp name (var ...) (form ...) (vs ...) (fs ...)
(a ... t1) (m ... t2) args body0 body1 ...))))
(define-syntax define-pandoric-procedure
(syntax-rules ()
((_ name ((var form) ...) args body0 body1 ...)
(%dpp name (var ...) (form ...) (var ...) (form ...)
() () args body0 body1 ...))))
(define-syntax pandoric-ref
(syntax-rules ()
((_ pandora var) ((pandora flag-a var)))))
(define-syntax pandoric-set!
(syntax-rules ()
((_ pandora var obj) ((pandora flag-m var)obj))))
))
(import (scheme base) (scheme write) (pandoric))
(define-pandoric-procedure pandtest ((acc 0)) (n)
(set! acc (+ n acc))
acc)
(display (pandtest 1))
(display (pandtest 2))
(display (pandoric-ref pandtest acc))
(pandoric-set! pandtest acc 0)
(display (pandtest 1))
(display (pandoric-ref pandtest acc))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment