throw new ArgumentException ("size");
if (app != null){
- string dir = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
+ string dir = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
//Console.WriteLine (dir);
+ /*
if (!Directory.Exists (dir)){
try {
Directory.CreateDirectory (dir);
}
if (app != null)
histfile = Path.Combine (dir, app) + ".history";
+ */
+ histfile = Path.Combine (dir, ".mal-history");
}
history = new string [size];
---------------------------------------------
Bash:
+ - explore using ${!prefix*} syntax (more like make impl)
C:
- come up with better way to do 20 vararg code
C#:
- step9_interop
- - use same history file
Clojure:
- allow '_' in make variable names
- errors should propagate up from within load-file
-
Mal:
- line numbers in errors
- step6_file: command line arguments
Python:
Ruby:
- - save history and use same history file
- - setup require search path
---------------------------------------------
rl = raw_input
def readline(prompt="user> "):
+ global history_loaded
if not history_loaded:
+ history_loaded = True
try:
with open(histfile, "r") as hf:
for line in hf.readlines():
TESTS =
-SOURCES_BASE = types.rb reader.rb printer.rb
+SOURCES_BASE = mal_readline.rb types.rb reader.rb printer.rb
SOURCES_LISP = env.rb core.rb stepA_more.rb
SOURCES = $(SOURCES_BASE) $(SOURCES_LISP)
--- /dev/null
+require "readline"
+
+$history_loaded = false
+$histfile = "#{ENV['HOME']}/.mal-history"
+
+def _readline(prompt)
+ if not $history_loaded
+ $history_loaded = true
+ File.readlines($histfile).each {|l| Readline::HISTORY.push(l.chomp)}
+ end
+
+ if line = Readline.readline(prompt, true)
+ File.open($histfile, 'a+') {|f| f.write(line+"\n")}
+ return line
+ else
+ return nil
+ end
+end
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
# read
def READ(str)
return PRINT(EVAL(READ(str), {}))
end
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
puts REP(line)
end
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
return PRINT(EVAL(READ(str), {}))
end
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP(line)
rescue Exception => e
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
repl_env[:*] = lambda {|a,b| a * b}
repl_env[:/] = lambda {|a,b| a / b}
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP[line]
rescue Exception => e
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
repl_env.set(:*, lambda {|a,b| a * b})
repl_env.set(:/, lambda {|a,b| a / b})
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP[line]
rescue Exception => e
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
# core.mal: defined using the language itself
RE["(def! not (fn* (a) (if a false true)))"]
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP[line]
rescue Exception => e
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
# core.mal: defined using the language itself
RE["(def! not (fn* (a) (if a false true)))"]
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP[line]
rescue Exception => e
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
}
exit 0
end
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP[line]
rescue Exception => e
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
}
exit 0
end
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP[line]
rescue Exception => e
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
}
exit 0
end
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP[line]
rescue Exception => e
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
}
exit 0
end
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP[line]
rescue Exception => e
-require "readline"
+$: << File.expand_path(File.dirname(__FILE__))
+require "mal_readline"
require "types"
require "reader"
require "printer"
}
exit 0
end
-while line = Readline.readline("user> ", true)
+while line = _readline("user> ")
begin
puts REP[line]
rescue Exception => e