Posted by Anonymous Tue 27th Feb 2007 21:46 - Syntax is Scheme - 35 views
Download | New Post | Modify | Hide line numbers
  1.  
  2. (define-syntax build-module
  3.   (syntax-rules (define)
  4.     ((_) '())
  5.     ((_ (define (n1 v1 ...)
  6.           b1  ...)
  7.         ...)
  8.      (build-module
  9.       (define n1 (lambda (v1 ...) b1 ...))
  10.       ...))
  11.      ((_ (define (n1 . a1)
  12.           b1  ...)
  13.          ...)
  14.      (build-module
  15.       (define n1 (lambda a1 b1 ...))
  16.       ...))
  17.      ((_ (define (n1 v1 ... . a1)
  18.            b1  ...)
  19.          ...)
  20.      (build-module
  21.       (define n1 (lambda (v1 ... . a1) b1 ...))
  22.       ...))
  23.     ((_ (define n1 v1)
  24.         (define n2 v2)
  25.         ...)
  26.      (cons (cons 'n1 v1)
  27.            (build-module (define n2 v2) ...)))))
  28.  
  29. (define-syntax module
  30.   (syntax-rules ()
  31.     ((_ body ...)
  32.      ((lambda (a)
  33.         (lambda (m)
  34.           (cdr (assoc m a))))
  35.       (build-module body ...)))))
  36.  
  37. (define-syntax define-module
  38.   (syntax-rules ()
  39.     ((_ name body ...)
  40.      (begin
  41.        (define name (module body ...))))))
  42.  
  43.  
  44.  
  45.  
  46. ((module
  47.    (define a 1))
  48.  'a)
  49.  
  50. ((module
  51.    (define a 1)
  52.    (define b 2))
  53.  'b)
  54.  
  55. ((module
  56.    (define a 1)
  57.    (define b 2)
  58.    (define c 3))
  59.  'c)
  60.  
  61. (define-module test
  62.   (define (test1 a b)
  63.     (list a b))
  64.   (define (test2 a . b)
  65.     (cons a b))
  66.   (define (test3 . a)
  67.     (reverse a)))
  68.  
  69. ((test 'test1) 1 2)
  70. ((test 'test2) 1 2)
  71. ((test 'test3) 1 2)

PermaLink to this entry https://pastebin.co.uk/11094
Posted by Anonymous Tue 27th Feb 2007 21:46 - Syntax is Scheme - 35 views
Download | New Post | Modify | Hide line numbers

 

Comments: 0