Skip to content

Instantly share code, notes, and snippets.

@wedesoft
Last active December 29, 2015 13:08
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 wedesoft/7674743 to your computer and use it in GitHub Desktop.
Save wedesoft/7674743 to your computer and use it in GitHub Desktop.
Playing around with the Heist Ruby Gem.
#!/usr/bin/env ruby
require 'heist'
# true
scheme = Heist::Runtime.new
# #<runtime: call/cc disabled, hygienic, eager>
def test x
puts "\# #{x.class}: #{x}"
x
end
# nil
scheme.exec '(define (test x) (* x x))'
# #<procedure:test>
scheme.exec [:define, [:test, :x], [:*, :x, :x]]
# #<procedure:test>
scheme.define(:test) { |x| x * x }
# #<procedure:test>
scheme.define :test, &method(:test)
# #<procedure:test>
scheme.exec [:test, 9]
# Fixnum: 9
# 9
scheme.exec([:quote, [:test, 9]]).to_s
# "(test 9)"
scheme.exec '(test 9)'
# Fixnum: 9
# 9
Heist::RubyParser.new.parse [:test, 9]
# (test 9)
Heist.parse('test 9').convert!
# (test 9)
Heist::RubyParser.new.parse([:test, 9]).eval scheme.user_scope
# Fixnum: 9
# 9
Heist.parse('test 9').convert!.to_ruby
# [:test, 9]
Heist.parse('test 9').convert!.eval scheme.user_scope
# Fixnum: 9
# 9
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment