aboutsummaryrefslogtreecommitdiff
path: root/ruby/core.rb
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-04-10 23:27:50 -0500
committerJoel Martin <github@martintribe.org>2014-04-10 23:27:50 -0500
commitd85fc03775e0f99d1c17ce62d5aad5bbcd8ae106 (patch)
treef7bee4a4f67a61cce150e7125e018f6ebdc8fec2 /ruby/core.rb
parent01e254893fede2c88fa7d2210da9e03af3a12617 (diff)
downloadmal-d85fc03775e0f99d1c17ce62d5aad5bbcd8ae106.tar.gz
mal-d85fc03775e0f99d1c17ce62d5aad5bbcd8ae106.zip
Ruby: add step8_macros
Diffstat (limited to 'ruby/core.rb')
-rw-r--r--ruby/core.rb5
1 files changed, 5 insertions, 0 deletions
diff --git a/ruby/core.rb b/ruby/core.rb
index 268ebad..824b59b 100644
--- a/ruby/core.rb
+++ b/ruby/core.rb
@@ -14,6 +14,11 @@ $core_ns = {
:/ => lambda {|a,b| a / b},
:list => lambda {|*a| List.new a},
:list? => lambda {|*a| a[0].is_a? List},
+ :cons => lambda {|a,b| List.new(b.clone.insert(0,a))},
+ :concat => lambda {|*a| List.new(a && a.reduce(:concat) || [])},
+ :nth => lambda {|a,b| a[b]},
+ :first => lambda {|a| a[0]},
+ :rest => lambda {|a| List.new(a.size > 0 && a.drop(1) || [])},
:empty? => lambda {|a| a.size == 0},
:count => lambda {|a| a.size},
}