Name: Anonymous 2011-03-02 8:20
* (nth 1 '(1 2 3 4))
2
* (elt "1234" 1)
#\2Explain this bullshit. argument order
* (nth 1 '(1 2 3 4))
2
* (elt "1234" 1)
#\2(define-syntax define-macro
(lambda (incoming)
(syntax-case incoming ()
((_ (?name ?arg ...) ?form ...)
(syntax
(define-macro ?name (lambda (?arg ...) ?form ...))))
((_ ?name ?func)
(syntax
(define-syntax ?name
(lambda (x)
(syntax-case x ()
((kwd . rest)
(datum->syntax #'kwd (apply ?func (cdr (syntax->datum
x)))))))))))))x)))))))))))))
(define-syntax (define-macro stx)
(syntax-case stx ()
((~ (n . a) . f) #'(~ n (lambda a . f)))
((~ n f)
#'(define-syntax (n stx)
(syntax-case stx ()
((k . r) #`#,(apply f (syntax->datum #'r))))))))#'r))))))))
define(fact(x)
let(loop (x(x) r(1))
if(zero?(x) 1
loop(sub1(x) *(x r)))))
λ(λ)λ(λ)λ(λ)λ(λ)car must always be outside:
define(fact(x)
let(loop x(x)(r(1))
if(zero?(x) 1
loop(sub1(x) *(x r)))))
$ mzscheme
Welcome to MzScheme v372 [3m], Copyright (c) 2004-2007 PLT Scheme Inc.
(define-syntax define-macro
(lambda (incoming)
(syntax-case incoming ()
((_ (?name ?arg ...) ?form ...)
(syntax
(define-macro ?name (lambda (?arg ...) ?form ...))))
((_ ?name ?func)
(syntax
(define-syntax ?name
(lambda (x)
(syntax-case x ()
((kwd . rest)
(datum->syntax #'kwd (apply ?func (cdr (syntax->datum
x)))))))))))))
(define-macro aif (cond then else)
`(let ((it ,cond))
(if it ,then ,else)))
stdin::423: define-macro: bad syntax in: (define-macro aif (cond then else) (quasiquote (let ((it (unquote cond))) (if it (unquote then) (unquote else)))))
(define-macro (aif cond then else) ...), I mean Jeez it's macro-by-example.
Welcome to MzScheme v372 [3m], Copyright (c) 2004-2007 PLT Scheme Inc.
(define-syntax (define-macro stx)
(syntax-case stx ()
((~ (n . a) . f) #'(~ n (lambda a . f)))
((~ n f)
#'(define-syntax (n stx)
(syntax-case stx ()
((k . r) #`#,(apply f (syntax->datum #'r))))))))
(define-macro (aif cond then else)
`(let ((it ,cond))
(if it ,then ,else)))
(aif 123 it nil)
reference to undefined identifier: syntax->datum