ruby: concat should not modify its argument
authorDov Murik <dov.murik@gmail.com>
Wed, 9 Mar 2016 19:23:13 +0000 (14:23 -0500)
committerDov Murik <dov.murik@gmail.com>
Wed, 9 Mar 2016 19:23:13 +0000 (14:23 -0500)
ruby/core.rb
tests/step7_quote.mal

index f3e1034..0b68c4a 100644 (file)
@@ -46,7 +46,7 @@ $core_ns = {
 
     :sequential? => lambda {|a| sequential?(a)},
     :cons =>      lambda {|a,b| List.new(b.clone.insert(0,a))},
-    :concat =>    lambda {|*a| List.new(a && a.reduce(:concat) || [])},
+    :concat =>    lambda {|*a| List.new(a && a.reduce(:+) || [])},
     :nth =>       lambda {|a,b| raise "nth: index out of range" if b >= a.size; a[b]},
     :first =>     lambda {|a| a.nil? ? nil : a[0]},
     :rest =>      lambda {|a| List.new(a.nil? || a.size == 0 ? [] : a.drop(1))},
index dcd672f..8cf7c69 100644 (file)
@@ -8,6 +8,12 @@
 (cons (list 1) (list 2 3))
 ;=>((1) 2 3)
 
+(def! a (list 2 3))
+(cons 1 a)
+;=>(1 2 3)
+a
+;=>(2 3)
+
 ;; Testing concat function
 (concat)
 ;=>()
 (concat (concat))
 ;=>()
 
+(def! a (list 1 2))
+(def! b (list 3 4))
+(concat a b (list 5 6))
+;=>(1 2 3 4 5 6)
+a
+;=>(1 2)
+b
+;=>(3 4)
 
 ;; Testing regular quote
 (quote 7)