Commit | Line | Data |
---|---|---|
8bf53bec JM |
1 | $core_ns = { |
2 | :"=" => lambda {|a,b| a == b}, | |
3a56f91a JM |
3 | :throw => lambda {|a| raise MalException.new(a), "Mal Exception"}, |
4 | :nil? => lambda {|a| a == nil}, | |
5 | :true? => lambda {|a| a == true}, | |
6 | :false? => lambda {|a| a == false}, | |
7 | :symbol? => lambda {|a| a.is_a? Symbol}, | |
8 | :symbol? => lambda {|a| a.is_a? Symbol}, | |
8bf53bec JM |
9 | :"pr-str" => lambda {|*a| a.map {|e| _pr_str(e, true)}.join(" ")}, |
10 | :"str" => lambda {|*a| a.map {|e| _pr_str(e, false)}.join("")}, | |
11 | :"prn" => lambda {|*a| puts(a.map {|e| _pr_str(e, true)}.join(" "))}, | |
12 | :"println" => lambda {|*a| puts(a.map {|e| _pr_str(e, false)}.join(" "))}, | |
13 | :< => lambda {|a,b| a < b}, | |
14 | :<= => lambda {|a,b| a <= b}, | |
15 | :> => lambda {|a,b| a > b}, | |
16 | :>= => lambda {|a,b| a >= b}, | |
17 | :+ => lambda {|a,b| a + b}, | |
18 | :- => lambda {|a,b| a - b}, | |
19 | :* => lambda {|a,b| a * b}, | |
20 | :/ => lambda {|a,b| a / b}, | |
3a56f91a | 21 | |
8bf53bec JM |
22 | :list => lambda {|*a| List.new a}, |
23 | :list? => lambda {|*a| a[0].is_a? List}, | |
3a56f91a JM |
24 | :vector => lambda {|*a| Vector.new a}, |
25 | :vector? => lambda {|*a| a[0].is_a? Vector}, | |
26 | :"hash-map" =>lambda {|*a| Hash[a.each_slice(2).to_a]}, | |
27 | :map? => lambda {|a| a.is_a? Hash}, | |
28 | :assoc => lambda {|*a| a[0].merge(Hash[a.drop(1).each_slice(2).to_a])}, | |
29 | :dissoc => lambda {|*a| h = a[0].clone; a.drop(1).each{|k| h.delete k}; h}, | |
30 | :get => lambda {|a,b| a[b]}, | |
31 | :contains? => lambda {|a,b| a.key? b}, | |
32 | :keys => lambda {|a| List.new a.keys}, | |
33 | :vals => lambda {|a| List.new a.values}, | |
34 | ||
35 | :sequential? => lambda {|a| sequential?(a)}, | |
d85fc037 JM |
36 | :cons => lambda {|a,b| List.new(b.clone.insert(0,a))}, |
37 | :concat => lambda {|*a| List.new(a && a.reduce(:concat) || [])}, | |
38 | :nth => lambda {|a,b| a[b]}, | |
39 | :first => lambda {|a| a[0]}, | |
40 | :rest => lambda {|a| List.new(a.size > 0 && a.drop(1) || [])}, | |
8bf53bec JM |
41 | :empty? => lambda {|a| a.size == 0}, |
42 | :count => lambda {|a| a.size}, | |
3a56f91a JM |
43 | :conj => lambda {|*a| a[0].clone.conj(a.drop(1))}, |
44 | :apply => lambda {|*a| a[0][*a[1..-2].concat(a[-1])]}, | |
45 | :map => lambda {|a,b| List.new(b.map {|e| a[e]})}, | |
46 | ||
47 | :"with-meta" => lambda {|a,b| x = a.clone; x.meta = b; x}, | |
48 | :meta => lambda {|a| a.meta}, | |
49 | :atom => lambda {|a| Atom.new(a)}, | |
50 | :atom? => lambda {|a| a.is_a? Atom}, | |
51 | :deref => lambda {|a| a.val}, | |
52 | :reset! => lambda {|a,b| a.val = b}, | |
53 | :swap! => lambda {|*a| a[0].val = a[1][*[a[0].val].concat(a.drop(2))]}, | |
8bf53bec JM |
54 | } |
55 |