예제 #1
0
        void Run(string[] args)
        {
            Log($"starting...");
            Log($" CLOJURE_LOAD_PATH={Environment.GetEnvironmentVariable("CLOJURE_LOAD_PATH")}");

            IFn load = Clojure.var("clojure.core", "load-file");

            Log($" clojure.core/load-file found.");

            IFn printEx = Clojure.var("clojure.stacktrace", "print-cause-trace");

            Log($" clojure.stacktrace/print-stack-trace found.");

            var script = args[0];

            Log($" (load-file '{script}') starting...");
            try
            {
                load.invoke(script);
                Log($" (load-file '{script}') done.");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                printEx.invoke(ex);
            }

            Log("done.");
        }
예제 #2
0
        public static void Main(string[] args)
        {
            var fn = Clojure.var("clojure.core", "println");

            fn.invoke("Hello from Clojure");
            Console.Read();
        }
예제 #3
0
        void Run(string[] args)
        {
            Log($"starting...");
            Log($" CLOJURE_LOAD_PATH={Environment.GetEnvironmentVariable("CLOJURE_LOAD_PATH")}");

            IFn load = Clojure.var("clojure.core", "load-file");

            Log($" clojure.load done.");

            load.invoke("./hello-world.clj");
            Log($" ./hello-world.clj done.");

            Log("done.");
        }
예제 #4
0
        static ClojureInit()
        {
            Eval = Clojure.var("clojure.core", "eval");

            object execFn = Clojure.read(@"
(defn execute  
  ""evaluates s-forms""
  ([request](execute request *ns*))
  ([request user-ns]    
      (try
        (binding [*ns* user-ns]
            (eval (read-string request)))
        (catch Exception e (str (. e Message) "" "" (. e StackTrace )))
)))");

            object nsGenFn = Clojure.read(@"
(defn generate-ns  
  ""generates ns for client connection""
  [] (let [user-ns (create-ns (symbol(str ""user"" )))]
    (execute(str ""(clojure.core/refer 'clojure.core)"") user-ns)
    user-ns)) ");


            //object definer = Clojure.read("(fn [name data] (def (symbol name) data ) ) ");
            //DefinerFn = Eval.invoke(definer) as IFn;

            var SyncCode = Clojure.read("(fn [handler document prom] (deliver prom (try (handler document)  (catch Exception e e)) )  ) ");

            Eval.invoke(Clojure.read("(def ^:dynamic sync)"));
            Sync = Eval.invoke(SyncCode) as IFn;
            var replCode = Clojure.read("(fn [in out err synchronizer] (binding [*in* in, *out* out *err* err sync synchronizer]  (clojure.main/with-bindings  (loop [] (try (clojure.main/repl ) (catch Exception e (clojure.main/repl-caught e) (set! *e e))) (flush) (recur)) ) ))");

            repl = Eval.invoke(replCode) as IFn;

            ExecuteInNs = Eval.invoke(execFn) as IFn;
            nsGen       = Eval.invoke(nsGenFn) as IFn;

            NS = nsGen.invoke();

            ExecuteInNs.invoke("(use \'clojure.reflect \'clojure.pprint \'clojure.repl)", NS);



            //ReplExe = ExecuteInNs.invoke(" (defn print-exe [r] (with-out-str (clojure.pprint/pprint (clojure.core/execute r)))") as IFn;
        }