diff --git a/implementations/scheme-chicken/defs.scm b/implementations/scheme-chicken/defs.scm new file mode 100644 index 0000000..7352e99 --- /dev/null +++ b/implementations/scheme-chicken/defs.scm @@ -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 index 0000000..f252b55 --- /dev/null +++ b/implementations/scheme-chicken/generate_defs.scm @@ -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))) diff --git a/implementations/scheme-chicken/joy.scm b/implementations/scheme-chicken/joy.scm index f9abca0..bc13e34 100644 --- a/implementations/scheme-chicken/joy.scm +++ b/implementations/scheme-chicken/joy.scm @@ -1,6 +1,7 @@ (import (chicken io)) (import (chicken string)) (import srfi-69) +(load "defs.scm") (define (joy stack expression dict) @@ -86,13 +87,10 @@ (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)