OSDN Git Service

Convert defs.txt to defs.scm.
authorsforman <sforman@hushmail.com>
Fri, 11 Aug 2023 17:15:31 +0000 (10:15 -0700)
committersforman <sforman@hushmail.com>
Fri, 11 Aug 2023 17:15:31 +0000 (10:15 -0700)
Gonna need a makefile.

implementations/scheme-chicken/defs.scm [new file with mode: 0644]
implementations/scheme-chicken/generate_defs.scm [new file with mode: 0644]
implementations/scheme-chicken/joy.scm

diff --git a/implementations/scheme-chicken/defs.scm b/implementations/scheme-chicken/defs.scm
new file mode 100644 (file)
index 0000000..7352e99
--- /dev/null
@@ -0,0 +1 @@
+(define (defs) (list "eq [false] [true] [false] cmp" "gt [true] [false] [false] cmp" "lt [false] [false] [true] cmp" "neq [true] [false] [true] cmp" "le [false] [true] [true] cmp" "ge [true] [true] [false] cmp" "-- 1 -" "? dup bool" "and nulco [nullary [false]] dip branch" "++ 1 +" "or nulco [nullary] dip [true] branch" "!- 0 >=" "<{} [] swap" "<<{} [] rollup" "<< lshift" ">> rshift" "abs dup 0 < [] [neg] branch" "anamorphism [pop []] swap [dip swons] genrec" "app1 grba infrst" "app2 [grba swap grba swap] dip [infrst] cons ii" "app3 3 appN" "appN [grabN] codi map reverse disenstacken" "at drop first" "average [sum] [size] cleave /" "b [i] dip i" "binary unary popd" "ccccons ccons ccons" "ccons cons cons" "clear [] swaack pop" "cleave fork popdd" "clop cleave popdd" "cmp [[>] swap] dipd [ifte] ccons [=] swons ifte" "codi cons dip" "codireco codi reco" "dinfrirst dip infrst" "dipd [dip] codi" "disenstacken swaack pop" "divmod [/] [%] clop" "down_to_zero [0 >] [dup --] while" "drop [rest] times" "dupd [dup] dip" "dupdd [dup] dipd" "dupdip dupd dip" "dupdipd dup dipd" "enstacken stack [clear] dip" "first uncons pop" "flatten <{} [concat] step" "fork [i] app2" "fourth rest third" "gcd true [tuck mod dup 0 >] loop pop" "genrec [[genrec] ccccons] nullary swons concat ifte" "grabN <{} [cons] times" "grba [stack popd] dip" "hypot [sqr] ii + sqrt" "ifte [nullary] dipd swap branch" "ii [dip] dupdip i" "infra swons swaack [i] dip swaack" "infrst infra first" "make_generator [codireco] ccons" "mod %" "neg 0 swap -" "not [true] [false] branch" "nulco [nullary] cons" "null [] swap concat bool not" "nullary [stack] dinfrirst" "of swap at" "over [dup] dip swap" "pam [i] map" "pm [+] [-] clop" "popd [pop] dip" "popdd [pop] dipd" "popop pop pop" "popopop pop popop" "popopd [popop] dip" "popopdd [popop] dipd" "product 1 swap [*] step" "quoted [unit] dip" "range [0 <=] [-- dup] anamorphism" "range_to_zero unit [down_to_zero] infra" "reco rest cons" "rest uncons popd" "reverse <{} shunt" "roll> swap swapd" "roll< swapd swap" "rollup roll>" "rolldown roll<" "rrest rest rest" "run <{} infra" "second rest first" "shift uncons [swons] dip" "shunt [swons] step" "size [pop ++] step_zero" "small dup null [rest null] [pop true] branch" "spiral_next [[[abs] ii <=] [[<>] [pop !-] or] and] [[!-] [[++]] [[--]] ifte dip] [[pop !-] [--] [++] ifte] ifte" "split_at [drop] [take] clop" "split_list [take reverse] [drop] clop" "sqr dup mul" "stackd [stack] dip" "step_zero 0 roll> step" "stuncons stack uncons" "sum [+] step_zero" "swapd [swap] dip" "swons swap cons" "swoncat swap concat" "tailrec [i] genrec" "take <<{} [shift] times pop" "ternary binary popd" "third rest second" "tuck dup swapd" "unary nullary popd" "uncons [first] [rest] cleave" "unit [] cons" "unquoted [i] dip" "unstack [[] swaack] dip swoncat swaack pop" "unswons uncons swap" "while swap nulco dupdipd concat loop" "x dup i" "step [_step0] x" "_step0 _step1 [popopop] [_stept] branch" "_step1 [?] dipd roll<" "_stept [uncons] dipd [dupdipd] dip x" "times [_times0] x" "_times0 _times1 [popopop] [_timest] branch" "_times1 [dup 0 >] dipd roll<" "_timest [[--] dip dupdipd] dip x" "map [_map0] cons [[] [_map?] [_mape]] dip tailrec" "_map? pop bool not" "_mape popd reverse" "_map0 [_map1] dipd _map2" "_map1 stackd shift" "_map2 [infrst] cons dipd roll< swons" "_isnt_bool not not" "_isnt_two_bools [_isnt_bool] ii" "_\\/_ [_isnt_bool] [not] branch" "/\\ _isnt_two_bools [pop false] [] branch" "\\/ _isnt_two_bools [] [pop true] branch"))
\ No newline at end of file
diff --git a/implementations/scheme-chicken/generate_defs.scm b/implementations/scheme-chicken/generate_defs.scm
new file mode 100644 (file)
index 0000000..f252b55
--- /dev/null
@@ -0,0 +1,18 @@
+;(load "joy.scm")
+(import (chicken string) (chicken io))
+
+(let ((source (with-input-from-file "../defs.txt" read-string)))
+  (let ((lines (cons 'list (string-split source "\n"))))
+    ;(let ((def_lists (map text->expression lines)))
+      (let ((code `(define (defs) ,lines))) 
+        (with-output-to-file "defs.scm" (lambda () (write code)))
+      )
+    ;)
+  )
+)
+
+;source = (with-input-from-file "../defs.txt" read-string)
+;lines = (string-split source "\n")
+;def_lists = (map text->expression lines)
+;code = `(define (defs) ,def_lists)
+;(with-output-to-file "defs.scm" (lambda () (write code)))
index f9abca0..bc13e34 100644 (file)
@@ -1,6 +1,7 @@
 (import (chicken io))
 (import (chicken string))
 (import srfi-69)
+(load "defs.scm")
 
 
 (define (joy stack expression dict)
 
 
 (define (initialize)
-  (load-defs
-    ; TODO: load defs at compile-time, not run-time.
-    (with-input-from-file "../defs.txt" read-string)
-    (make-hash-table string=? string-hash)))
+  (load-defs (make-hash-table string=? string-hash)))
 
-(define (load-defs defs dict)
-  (map (lambda (def) (add-def def dict)) (string-split defs "\n"))
+(define (load-defs dict)
+  (map (lambda (def) (add-def def dict)) (defs))  ;defs is defined in defs.scm
   dict)
 
 (define (add-def def dict)