Skip to content

Instantly share code, notes, and snippets.

@disnet
Created October 8, 2012 19:02
Show Gist options
  • Star 19 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save disnet/3854258 to your computer and use it in GitHub Desktop.
Save disnet/3854258 to your computer and use it in GitHub Desktop.
start of scheme in sweet.js (modified from http://pastebin.com/0nPBg8LY)
macro sexp {
case () => {
;
}
case ($p) => {
$p
}
case ($x $y) => {
$x($y);
}
case (return $x) => {
return $x;
}
case (display $params) => {
console.log($params);
}
case (define $name $body) => {
var $name = scheme { $body }
}
case (lambda $params $body) => {
function $params { scheme {$body}}
}
}
macro scheme {
case { $x } => {
sexp $x
}
case { $x $rest ... } => {
sexp $x
scheme { $rest ... }
}
}
scheme {
(display "hello")
(display "foo")
(define foo (lambda (a) (return "hello")))
}
@simon-o-matic
Copy link

Wow. This blew me away. These type of macros are are rushing back to me now from my scheme days and to know I can now have them in my new favourite language, JavaScript, is such a joy. And presenting it as a scheme macro that creates scheme in JavaScript in 33 lines of code, to boot!

@marcioAlmada
Copy link

these macros doesn't work anymore :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment