|
@@ -43,6 +43,18 @@ module Chervil
|
43
|
43
|
end
|
44
|
44
|
end
|
45
|
45
|
|
|
46
|
+ def self.eval(source, env)
|
|
47
|
+ lexer = Lexer.new(source)
|
|
48
|
+ tree = Parser.new(lexer).parse
|
|
49
|
+
|
|
50
|
+ if tree.is_a?(Error)
|
|
51
|
+ return tree
|
|
52
|
+ end
|
|
53
|
+
|
|
54
|
+ interpreter = Interpreter.new(tree, env)
|
|
55
|
+ interpreter.interpret.first
|
|
56
|
+ end
|
|
57
|
+
|
46
|
58
|
CORE = {
|
47
|
59
|
"+" => Proc.new { |args| type_check(args, Float) || args.inject(:+) },
|
48
|
60
|
"-" => Proc.new { |args| type_check(args, Float) || args.inject(:-) },
|
|
@@ -102,7 +114,11 @@ module Chervil
|
102
|
114
|
els.prepend(el)
|
103
|
115
|
end
|
104
|
116
|
end
|
105
|
|
- end
|
|
117
|
+ end,
|
|
118
|
+ }
|
|
119
|
+
|
|
120
|
+ NATIVE_CORE = {
|
|
121
|
+ "map" => "(define (map f xs) (if (= xs '()) '() (cons (f (car xs)) (map f (cdr xs)))))"
|
106
|
122
|
}
|
107
|
123
|
end
|
108
|
124
|
end
|