shen-ruby 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.travis.yml +9 -3
  4. data/Gemfile +1 -4
  5. data/HISTORY.md +16 -0
  6. data/MIT_LICENSE.txt +1 -1
  7. data/README.md +25 -26
  8. data/Rakefile +3 -11
  9. data/bin/shen_test_suite.rb +15 -3
  10. data/bin/srrepl +6 -8
  11. data/lib/shen_ruby.rb +6 -1
  12. data/lib/shen_ruby/converters.rb +23 -0
  13. data/lib/shen_ruby/version.rb +1 -1
  14. data/shen-ruby.gemspec +4 -1
  15. data/shen/lib/shen_ruby/shen.rb +49 -33
  16. data/shen/release/benchmarks/N_queens.shen +45 -45
  17. data/shen/release/benchmarks/README.shen +14 -14
  18. data/shen/release/benchmarks/benchmarks.shen +52 -52
  19. data/shen/release/benchmarks/einstein.shen +32 -32
  20. data/shen/release/benchmarks/interpreter.shen +219 -219
  21. data/shen/release/benchmarks/jnk.shen +193 -193
  22. data/shen/release/benchmarks/powerset.shen +10 -10
  23. data/shen/release/benchmarks/prime.shen +10 -10
  24. data/shen/release/benchmarks/short.shen +129 -129
  25. data/shen/release/k_lambda/core.kl +181 -181
  26. data/shen/release/k_lambda/declarations.kl +131 -131
  27. data/shen/release/k_lambda/load.kl +84 -84
  28. data/shen/release/k_lambda/macros.kl +112 -112
  29. data/shen/release/k_lambda/prolog.kl +252 -252
  30. data/shen/release/k_lambda/reader.kl +222 -222
  31. data/shen/release/k_lambda/sequent.kl +166 -166
  32. data/shen/release/k_lambda/sys.kl +271 -271
  33. data/shen/release/k_lambda/t-star.kl +139 -139
  34. data/shen/release/k_lambda/toplevel.kl +135 -135
  35. data/shen/release/k_lambda/track.kl +103 -103
  36. data/shen/release/k_lambda/types.kl +324 -324
  37. data/shen/release/k_lambda/writer.kl +105 -105
  38. data/shen/release/k_lambda/yacc.kl +113 -113
  39. data/shen/release/test_programs/Chap13/problems.txt +26 -26
  40. data/shen/release/test_programs/README.shen +52 -52
  41. data/shen/release/test_programs/TinyLispFunctions.txt +15 -15
  42. data/shen/release/test_programs/TinyTypes.shen +55 -55
  43. data/shen/release/test_programs/binary.shen +24 -24
  44. data/shen/release/test_programs/bubble_version_1.shen +28 -28
  45. data/shen/release/test_programs/bubble_version_2.shen +22 -22
  46. data/shen/release/test_programs/calculator.shen +21 -21
  47. data/shen/release/test_programs/cartprod.shen +23 -23
  48. data/shen/release/test_programs/change.shen +25 -25
  49. data/shen/release/test_programs/classes-defaults.shen +94 -94
  50. data/shen/release/test_programs/classes-inheritance.shen +100 -100
  51. data/shen/release/test_programs/classes-typed.shen +74 -74
  52. data/shen/release/test_programs/classes-untyped.shen +46 -46
  53. data/shen/release/test_programs/depth_.shen +14 -14
  54. data/shen/release/test_programs/einstein.shen +34 -34
  55. data/shen/release/test_programs/fruit_machine.shen +46 -46
  56. data/shen/release/test_programs/interpreter.shen +217 -217
  57. data/shen/release/test_programs/metaprog.shen +85 -85
  58. data/shen/release/test_programs/minim.shen +192 -192
  59. data/shen/release/test_programs/mutual.shen +11 -11
  60. data/shen/release/test_programs/n_queens.shen +45 -45
  61. data/shen/release/test_programs/newton_version_1.shen +33 -33
  62. data/shen/release/test_programs/newton_version_2.shen +24 -24
  63. data/shen/release/test_programs/parse.prl +14 -14
  64. data/shen/release/test_programs/parser.shen +51 -51
  65. data/shen/release/test_programs/powerset.shen +10 -10
  66. data/shen/release/test_programs/prime.shen +10 -10
  67. data/shen/release/test_programs/prolog.shen +78 -78
  68. data/shen/release/test_programs/proof_assistant.shen +80 -80
  69. data/shen/release/test_programs/proplog_version_1.shen +25 -25
  70. data/shen/release/test_programs/proplog_version_2.shen +27 -27
  71. data/shen/release/test_programs/qmachine.shen +66 -66
  72. data/shen/release/test_programs/red-black.shen +54 -54
  73. data/shen/release/test_programs/search.shen +55 -55
  74. data/shen/release/test_programs/semantic_net.shen +44 -44
  75. data/shen/release/test_programs/spreadsheet.shen +34 -34
  76. data/shen/release/test_programs/stack.shen +27 -27
  77. data/shen/release/test_programs/streams.shen +20 -20
  78. data/shen/release/test_programs/strings.shen +57 -57
  79. data/shen/release/test_programs/structures-typed.shen +71 -71
  80. data/shen/release/test_programs/structures-untyped.shen +41 -41
  81. data/shen/release/test_programs/tests.shen +232 -232
  82. data/shen/release/test_programs/types.shen +11 -11
  83. data/shen/release/test_programs/whist.shen +239 -239
  84. data/shen/release/test_programs/yacc.shen +132 -132
  85. data/spec/shen_ruby/converters_spec.rb +48 -0
  86. data/spec/spec_helper.rb +1 -2
  87. metadata +55 -60
  88. data/k_lambda_spec/atom_spec.rb +0 -85
  89. data/k_lambda_spec/primitives/arithmetic_spec.rb +0 -175
  90. data/k_lambda_spec/primitives/assignments_spec.rb +0 -44
  91. data/k_lambda_spec/primitives/boolean_operations_spec.rb +0 -136
  92. data/k_lambda_spec/primitives/generic_functions_spec.rb +0 -120
  93. data/k_lambda_spec/primitives/lists_spec.rb +0 -40
  94. data/k_lambda_spec/primitives/strings_spec.rb +0 -77
  95. data/k_lambda_spec/primitives/symbols_spec.rb +0 -24
  96. data/k_lambda_spec/primitives/vectors_spec.rb +0 -92
  97. data/k_lambda_spec/spec_helper.rb +0 -29
  98. data/k_lambda_spec/support/shared_examples.rb +0 -124
  99. data/k_lambda_spec/tail_recursion_spec.rb +0 -30
  100. data/lib/kl.rb +0 -7
  101. data/lib/kl/absvector.rb +0 -12
  102. data/lib/kl/compiler.rb +0 -360
  103. data/lib/kl/cons.rb +0 -51
  104. data/lib/kl/empty_list.rb +0 -12
  105. data/lib/kl/environment.rb +0 -163
  106. data/lib/kl/error.rb +0 -4
  107. data/lib/kl/internal_error.rb +0 -7
  108. data/lib/kl/lexer.rb +0 -186
  109. data/lib/kl/primitives/arithmetic.rb +0 -60
  110. data/lib/kl/primitives/assignments.rb +0 -15
  111. data/lib/kl/primitives/booleans.rb +0 -21
  112. data/lib/kl/primitives/error_handling.rb +0 -13
  113. data/lib/kl/primitives/extensions.rb +0 -12
  114. data/lib/kl/primitives/generic_functions.rb +0 -29
  115. data/lib/kl/primitives/lists.rb +0 -23
  116. data/lib/kl/primitives/streams.rb +0 -28
  117. data/lib/kl/primitives/strings.rb +0 -63
  118. data/lib/kl/primitives/symbols.rb +0 -18
  119. data/lib/kl/primitives/time.rb +0 -17
  120. data/lib/kl/primitives/vectors.rb +0 -36
  121. data/lib/kl/reader.rb +0 -46
  122. data/spec/kl/cons_spec.rb +0 -12
  123. data/spec/kl/environment_spec.rb +0 -282
  124. data/spec/kl/interop_spec.rb +0 -68
  125. data/spec/kl/lexer_spec.rb +0 -149
  126. data/spec/kl/primitives/generic_functions_spec.rb +0 -29
  127. data/spec/kl/primitives/symbols_spec.rb +0 -21
  128. data/spec/kl/reader_spec.rb +0 -42
@@ -1,53 +1,53 @@
1
- \*
2
-
3
- This is the test harness for Shen. Assuming your port to Blub is in the directory Platforms/Blub; do the
4
- following.
5
-
6
- (cd "../../Test Programs")
7
- (load "README.shen")
8
- (load "tests.shen")
9
-
10
- *\
11
-
12
- (package test-harness [report reset ok passed failed]
13
-
14
- (define reset
15
- -> (set *passed* (set *failed* 0)))
16
-
17
- (defmacro exec-macro
18
- [exec Name Expr Prediction] -> [trap-error [let (protect Output) [output "~%~A: ~R = ~S" Name (rcons Expr) Prediction]
19
- (protect Result) [time Expr]
20
- [if [= (protect Result) Prediction] [passed] [failed (protect Result)]]]
21
- [/. (protect E) [err (protect E)]]])
22
-
23
- (define rcons
24
- [X | Y] -> [cons (rcons X) (rcons Y)]
25
- X -> X)
26
-
27
- (define passed
28
- -> (do (trap-error (set *passed* (+ 1 (value *passed*))) (/. E (set *passed* 1)))
29
- (print passed)))
30
-
31
- (define failed
32
- Result -> (let Fail+ (trap-error (set *failed* (+ 1 (value *failed*))) (/. E (set *failed* 1)))
33
- ShowResult (output "~S returned~%" Result)
34
- (if (y-or-n? "failed; continue?") ok (error "kill"))))
35
-
36
- (define err
37
- E -> (error "") where (= (error-to-string E) "kill")
38
- E -> (do (trap-error (set *failed* (+ 1 (value *failed*))) (/. E (set *failed* 1)))
39
- (output "~%failed with error ~A~%" (error-to-string E))))
40
-
41
- (defmacro report-results-macro
42
- [report Name | Tests] -> (let NewTests (create-tests Name Tests)
43
- [do | NewTests]))
44
-
45
- (define create-tests
46
- Name [] -> [[results] ok]
47
- Name [Test Prediction | Tests] -> [[exec Name Test Prediction] | (create-tests Name Tests)])
48
-
49
- (define results
50
- -> (let Passed (trap-error (value *passed*) (/. E 0))
51
- Failed (trap-error (value *failed*) (/. E 0))
52
- Percent (* (/ Passed (+ Passed Failed)) 100)
1
+ \*
2
+
3
+ This is the test harness for Shen. Assuming your port to Blub is in the directory Platforms/Blub; do the
4
+ following.
5
+
6
+ (cd "../../Test Programs")
7
+ (load "README.shen")
8
+ (load "tests.shen")
9
+
10
+ *\
11
+
12
+ (package test-harness [report reset ok passed failed]
13
+
14
+ (define reset
15
+ -> (set *passed* (set *failed* 0)))
16
+
17
+ (defmacro exec-macro
18
+ [exec Name Expr Prediction] -> [trap-error [let (protect Output) [output "~%~A: ~R = ~S" Name (rcons Expr) Prediction]
19
+ (protect Result) [time Expr]
20
+ [if [= (protect Result) Prediction] [passed] [failed (protect Result)]]]
21
+ [/. (protect E) [err (protect E)]]])
22
+
23
+ (define rcons
24
+ [X | Y] -> [cons (rcons X) (rcons Y)]
25
+ X -> X)
26
+
27
+ (define passed
28
+ -> (do (trap-error (set *passed* (+ 1 (value *passed*))) (/. E (set *passed* 1)))
29
+ (print passed)))
30
+
31
+ (define failed
32
+ Result -> (let Fail+ (trap-error (set *failed* (+ 1 (value *failed*))) (/. E (set *failed* 1)))
33
+ ShowResult (output "~S returned~%" Result)
34
+ (if (y-or-n? "failed; continue?") ok (error "kill"))))
35
+
36
+ (define err
37
+ E -> (error "") where (= (error-to-string E) "kill")
38
+ E -> (do (trap-error (set *failed* (+ 1 (value *failed*))) (/. E (set *failed* 1)))
39
+ (output "~%failed with error ~A~%" (error-to-string E))))
40
+
41
+ (defmacro report-results-macro
42
+ [report Name | Tests] -> (let NewTests (create-tests Name Tests)
43
+ [do | NewTests]))
44
+
45
+ (define create-tests
46
+ Name [] -> [[results] ok]
47
+ Name [Test Prediction | Tests] -> [[exec Name Test Prediction] | (create-tests Name Tests)])
48
+
49
+ (define results
50
+ -> (let Passed (trap-error (value *passed*) (/. E 0))
51
+ Failed (trap-error (value *failed*) (/. E 0))
52
+ Percent (* (/ Passed (+ Passed Failed)) 100)
53
53
  (output "~%passed ... ~A~%failed ...~A~%pass rate ...~A%~%~%" Passed Failed Percent))) )
@@ -1,16 +1,16 @@
1
- (defun plus (x y)
2
- (lispif (equal x 0)
3
- y
4
- (plus (prec x) (succ y))))
5
-
6
- (defun member (x y)
7
- (lispif (equal y (empty!))
8
- (empty!)
9
- (lispif (equal x (car y))
10
- y
11
- (member x (cdr y)))))
12
-
13
- (defun join (x y)
14
- (lispif (equal x (empty!))
15
- y
1
+ (defun plus (x y)
2
+ (lispif (equal x 0)
3
+ y
4
+ (plus (prec x) (succ y))))
5
+
6
+ (defun member (x y)
7
+ (lispif (equal y (empty!))
8
+ (empty!)
9
+ (lispif (equal x (car y))
10
+ y
11
+ (member x (cdr y)))))
12
+
13
+ (defun join (x y)
14
+ (lispif (equal x (empty!))
15
+ y
16
16
  (lispcons (car x) (join (cdr x) y))))
@@ -1,55 +1,55 @@
1
- (specialise defun)
2
- (specialise lambda')
3
-
4
- (datatype tiny_lisp_type_theory
5
-
6
- let Lambda (mk_lambda Xs Body)
7
- F : A >> Lambda : A;
8
- __________________
9
- (defun F Xs Body) : A;
10
-
11
- let X* (gensym &&x)
12
- let Y* (subst X* X Y)
13
- X* : A >> Y* : B;
14
- _____________________
15
- (lambda' (X) Y) : (A --> B);
16
-
17
- F : (A --> B); X : A;
18
- ________________
19
- (F X) : B;
20
-
21
- ____________________________
22
- lispif : (bool --> (A --> (A --> A)));
23
-
24
- ________________________
25
- equal : (A --> (A --> bool));
26
-
27
- ___________________________
28
- lispcons : (A --> ((list A) --> (list A)));
29
-
30
- ______________
31
- car : ((list A) --> A);
32
-
33
- _______________
34
- cdr : ((list A) --> (list A));
35
-
36
- if (element? F [succ prec])
37
- ____________________
38
- F : (number --> number);
39
-
40
- ___________
41
- (tee!) : bool;
42
-
43
- ____________
44
- (empty!) : (list A);
45
-
46
- ________
47
- (empty!) : bool;
48
-
49
- if (symbol? X)
50
- ____________
51
- (quote X) : symbol;)
52
-
53
- (define mk_lambda
54
- [X] Body -> [lambda' [X] Body]
55
- [X | Y] Body -> [lambda' [X] (mk_lambda Y Body)])
1
+ (specialise defun)
2
+ (specialise lambda')
3
+
4
+ (datatype tiny_lisp_type_theory
5
+
6
+ let Lambda (mk_lambda Xs Body)
7
+ F : A >> Lambda : A;
8
+ __________________
9
+ (defun F Xs Body) : A;
10
+
11
+ let X* (gensym &&x)
12
+ let Y* (subst X* X Y)
13
+ X* : A >> Y* : B;
14
+ _____________________
15
+ (lambda' (X) Y) : (A --> B);
16
+
17
+ F : (A --> B); X : A;
18
+ ________________
19
+ (F X) : B;
20
+
21
+ ____________________________
22
+ lispif : (bool --> (A --> (A --> A)));
23
+
24
+ ________________________
25
+ equal : (A --> (A --> bool));
26
+
27
+ ___________________________
28
+ lispcons : (A --> ((list A) --> (list A)));
29
+
30
+ ______________
31
+ car : ((list A) --> A);
32
+
33
+ _______________
34
+ cdr : ((list A) --> (list A));
35
+
36
+ if (element? F [succ prec])
37
+ ____________________
38
+ F : (number --> number);
39
+
40
+ ___________
41
+ (tee!) : bool;
42
+
43
+ ____________
44
+ (empty!) : (list A);
45
+
46
+ ________
47
+ (empty!) : bool;
48
+
49
+ if (symbol? X)
50
+ ____________
51
+ (quote X) : symbol;)
52
+
53
+ (define mk_lambda
54
+ [X] Body -> [lambda' [X] Body]
55
+ [X | Y] Body -> [lambda' [X] (mk_lambda Y Body)])
@@ -1,24 +1,24 @@
1
- (datatype binary
2
-
3
- if (element? X [0 1])
4
- _____________
5
- X : zero-or-one;
6
-
7
- X : zero-or-one;
8
- ________________
9
- [X] : binary;
10
-
11
- X : zero-or-one; Y : binary;
12
- ____________________________
13
- [X | Y] : binary;
14
-
15
- X : zero-or-one, [Y | Z] : binary >> P;
16
- ________________________________________
17
- [X Y | Z] : binary >> P;)
18
-
19
- (define complement
20
- {binary --> binary}
21
- [0] -> [1]
22
- [1] -> [0]
23
- [1 N | X] -> [0 | (complement [N | X])]
24
- [0 N | X] -> [1 | (complement [N | X])])
1
+ (datatype binary
2
+
3
+ if (element? X [0 1])
4
+ _____________
5
+ X : zero-or-one;
6
+
7
+ X : zero-or-one;
8
+ ________________
9
+ [X] : binary;
10
+
11
+ X : zero-or-one; Y : binary;
12
+ ____________________________
13
+ [X | Y] : binary;
14
+
15
+ X : zero-or-one, [Y | Z] : binary >> P;
16
+ ________________________________________
17
+ [X Y | Z] : binary >> P;)
18
+
19
+ (define complement
20
+ {binary --> binary}
21
+ [0] -> [1]
22
+ [1] -> [0]
23
+ [1 N | X] -> [0 | (complement [N | X])]
24
+ [0 N | X] -> [1 | (complement [N | X])])
@@ -1,28 +1,28 @@
1
- (define bubble-sort
2
- \* bubble again if you need to *\
3
- X -> (bubble-again-perhaps (bubble X) X))
4
-
5
- (define bubble
6
- [] -> []
7
- [X] -> [X]
8
- [X Y | Z] -> [Y | (bubble [X | Z])] where (> Y X)
9
- [X Y | Z] -> [X | (bubble [Y | Z])])
10
-
11
- (define bubble-again-perhaps
12
- \* no change as a result of bubbling - then the job is done *\
13
- X X -> X
14
- \* else bubble again *\
15
- X _ -> (bubble-sort X))
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
1
+ (define bubble-sort
2
+ \* bubble again if you need to *\
3
+ X -> (bubble-again-perhaps (bubble X) X))
4
+
5
+ (define bubble
6
+ [] -> []
7
+ [X] -> [X]
8
+ [X Y | Z] -> [Y | (bubble [X | Z])] where (> Y X)
9
+ [X Y | Z] -> [X | (bubble [Y | Z])])
10
+
11
+ (define bubble-again-perhaps
12
+ \* no change as a result of bubbling - then the job is done *\
13
+ X X -> X
14
+ \* else bubble again *\
15
+ X _ -> (bubble-sort X))
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
@@ -1,22 +1,22 @@
1
- (define bubble-sort
2
- X -> (fix bubble X))
3
-
4
- (define bubble
5
- [] -> []
6
- [X] -> [X]
7
- [X Y | Z] -> [Y | (bubble [X | Z])] where (> Y X)
8
- [X Y | Z] -> [X | (bubble [Y | Z])])
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
1
+ (define bubble-sort
2
+ X -> (fix bubble X))
3
+
4
+ (define bubble
5
+ [] -> []
6
+ [X] -> [X]
7
+ [X Y | Z] -> [Y | (bubble [X | Z])] where (> Y X)
8
+ [X Y | Z] -> [X | (bubble [Y | Z])])
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
@@ -1,21 +1,21 @@
1
- (datatype arith-expr
2
-
3
- X : number;
4
- ====================
5
- [num X] : arith-expr;
6
-
7
- if (element? Op [+ - * /])
8
- X : arith-expr; Y : arith-expr;
9
- ===============================
10
- [X Op Y] : arith-expr;)
11
-
12
- (define do-calculation
13
- {arith-expr --> number}
14
- [X + Y] -> (+ (do-calculation X) (do-calculation Y))
15
- [X - Y] -> (- (do-calculation X) (do-calculation Y))
16
- [X * Y] -> (* (do-calculation X) (do-calculation Y))
17
- [X / Y] -> (/ (do-calculation X) (do-calculation Y))
18
- [num X] -> X)
19
-
20
-
21
-
1
+ (datatype arith-expr
2
+
3
+ X : number;
4
+ ====================
5
+ [num X] : arith-expr;
6
+
7
+ if (element? Op [+ - * /])
8
+ X : arith-expr; Y : arith-expr;
9
+ ===============================
10
+ [X Op Y] : arith-expr;)
11
+
12
+ (define do-calculation
13
+ {arith-expr --> number}
14
+ [X + Y] -> (+ (do-calculation X) (do-calculation Y))
15
+ [X - Y] -> (- (do-calculation X) (do-calculation Y))
16
+ [X * Y] -> (* (do-calculation X) (do-calculation Y))
17
+ [X / Y] -> (/ (do-calculation X) (do-calculation Y))
18
+ [num X] -> X)
19
+
20
+
21
+
@@ -1,23 +1,23 @@
1
- (define cartesian-product
2
- [ ] _ -> [ ]
3
- [X | Y] Z -> (append (all-pairs-using-X X Z) (cartesian-product Y Z)))
4
-
5
- (define all-pairs-using-X
6
- _ [ ] -> [ ]
7
- X [Y | Z] -> [[X Y] | (all-pairs-using-X X Z)])
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
1
+ (define cartesian-product
2
+ [ ] _ -> [ ]
3
+ [X | Y] Z -> (append (all-pairs-using-X X Z) (cartesian-product Y Z)))
4
+
5
+ (define all-pairs-using-X
6
+ _ [ ] -> [ ]
7
+ X [Y | Z] -> [[X Y] | (all-pairs-using-X X Z)])
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+