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,25 +1,25 @@
1
- (define count-change
2
- Amount -> (count-change* Amount 200))
3
-
4
- (define count-change*
5
- 0 _ -> 1
6
- _ 0 -> 0
7
- Amount _ -> 0 where (> 0 Amount)
8
- Amount Fst_Denom
9
- -> (+ (count-change* (- Amount Fst_Denom) Fst_Denom)
10
- (count-change* Amount (next-denom Fst_Denom))))
11
-
12
- (define next-denom
13
- 200 -> 100
14
- 100 -> 50
15
- 50 -> 20
16
- 20 -> 10
17
- 10 -> 5
18
- 5 -> 2
19
- 2 -> 1
20
- 1 -> 0)
21
-
22
-
23
-
24
-
25
-
1
+ (define count-change
2
+ Amount -> (count-change* Amount 200))
3
+
4
+ (define count-change*
5
+ 0 _ -> 1
6
+ _ 0 -> 0
7
+ Amount _ -> 0 where (> 0 Amount)
8
+ Amount Fst_Denom
9
+ -> (+ (count-change* (- Amount Fst_Denom) Fst_Denom)
10
+ (count-change* Amount (next-denom Fst_Denom))))
11
+
12
+ (define next-denom
13
+ 200 -> 100
14
+ 100 -> 50
15
+ 50 -> 20
16
+ 20 -> 10
17
+ 10 -> 5
18
+ 5 -> 2
19
+ 2 -> 1
20
+ 1 -> 0)
21
+
22
+
23
+
24
+
25
+
@@ -1,94 +1,94 @@
1
- (datatype class
2
-
3
- Slots : [slot];
4
- _______________________________________
5
- (defclass Class Slots) : (class Class);
6
-
7
- Attribute : symbol; Type : symbol;
8
- ===================================
9
- (@p Attribute Type) : slot;
10
-
11
- Default : Type; Attribute : symbol; Type : symbol;
12
- ==================================================
13
- (@p Attribute Type Default) : slot;)
14
-
15
- (define defclass
16
- Class ClassDef -> (let Attributes (map fst ClassDef)
17
- Types (record-attribute-types Class ClassDef)
18
- Assoc (map assign-values ClassDef)
19
- NewClassDef [[class | Class] | Assoc]
20
- Store (put-prop Class classdef NewClassDef)
21
- RecordClass (axiom Class Class [class Class])
22
- Class))
23
-
24
- (define assign-values
25
- (@p Attribute _ Value) -> [Attribute | Value]
26
- (@p Attribute _) -> [Attribute | fail!])
27
-
28
- (define axiom
29
- DataType X A -> (eval [datatype DataType
30
- ________
31
- X : A;]))
32
-
33
- (define record-attribute-types
34
- _ [] -> []
35
- Class [(@p Attribute Type _) | ClassDef]
36
- -> (let DataTypeName (concat Class Attribute)
37
- DataType (axiom DataTypeName Attribute [attribute Class Type])
38
- (record-attribute-types Class ClassDef))
39
- Class [(@p Attribute Type) | ClassDef]
40
- -> (let DataTypeName (concat Class Attribute)
41
- DataType (axiom DataTypeName Attribute [attribute Class Type])
42
- (record-attribute-types Class ClassDef)))
43
-
44
- (declare make-instance [[class Class] --> [instance Class]])
45
-
46
- (define make-instance
47
- Class -> (let ClassDef (get-prop Class classdef [])
48
- (if (empty? ClassDef)
49
- (error "class ~A does not exist~%" Class)
50
- ClassDef)))
51
-
52
- (declare get-value [[attribute Class A] --> [instance Class] --> A])
53
-
54
- (define get-value
55
- Attribute Instance -> (let LookUp (assoc Attribute Instance)
56
- (get-value-test LookUp)))
57
-
58
- (define get-value-test
59
- [ ] -> (error "no such attribute!~%")
60
- [_ | fail!] -> (error "no such value!~%")
61
- [_ | Value] -> Value)
62
-
63
- (declare has-value? [[attribute Class A] --> [instance Class] --> boolean])
64
-
65
- (define has-value?
66
- Attribute Instance -> (let LookUp (assoc Attribute Instance)
67
- (has-value-test LookUp)))
68
-
69
- (define has-value-test
70
- [ ] -> (error "no such attribute!~%")
71
- [_ | fail!] -> false
72
- _ -> true)
73
-
74
- (declare has-attribute? [symbol --> [instance Class] --> boolean])
75
-
76
- (define has-attribute?
77
- Attribute Instance -> (let LookUp (assoc Attribute Instance)
78
- (not (empty? LookUp))))
79
-
80
- (declare change-value [[instance Class] --> [attribute Class A] --> A --> [instance Class]])
81
-
82
- (define change-value
83
- _ class _ -> (error "cannot change the class of an instance!~%")
84
- [ ] _ _ -> (error "no such attribute!~%")
85
- [[Attribute | _] | Instance] Attribute Value
86
- -> [[Attribute | Value] | Instance]
87
- [Slot | Instance] Attribute Value
88
- -> [Slot | (change-value Instance Attribute Value)])
89
-
90
- (declare instance-of [[instance Class] --> [class Class]])
91
-
92
- (define instance-of
93
- [[class | Class] | _] -> Class
94
- _ -> (error "not a class instance!"))
1
+ (datatype class
2
+
3
+ Slots : [slot];
4
+ _______________________________________
5
+ (defclass Class Slots) : (class Class);
6
+
7
+ Attribute : symbol; Type : symbol;
8
+ ===================================
9
+ (@p Attribute Type) : slot;
10
+
11
+ Default : Type; Attribute : symbol; Type : symbol;
12
+ ==================================================
13
+ (@p Attribute Type Default) : slot;)
14
+
15
+ (define defclass
16
+ Class ClassDef -> (let Attributes (map fst ClassDef)
17
+ Types (record-attribute-types Class ClassDef)
18
+ Assoc (map assign-values ClassDef)
19
+ NewClassDef [[class | Class] | Assoc]
20
+ Store (put-prop Class classdef NewClassDef)
21
+ RecordClass (axiom Class Class [class Class])
22
+ Class))
23
+
24
+ (define assign-values
25
+ (@p Attribute _ Value) -> [Attribute | Value]
26
+ (@p Attribute _) -> [Attribute | fail!])
27
+
28
+ (define axiom
29
+ DataType X A -> (eval [datatype DataType
30
+ ________
31
+ X : A;]))
32
+
33
+ (define record-attribute-types
34
+ _ [] -> []
35
+ Class [(@p Attribute Type _) | ClassDef]
36
+ -> (let DataTypeName (concat Class Attribute)
37
+ DataType (axiom DataTypeName Attribute [attribute Class Type])
38
+ (record-attribute-types Class ClassDef))
39
+ Class [(@p Attribute Type) | ClassDef]
40
+ -> (let DataTypeName (concat Class Attribute)
41
+ DataType (axiom DataTypeName Attribute [attribute Class Type])
42
+ (record-attribute-types Class ClassDef)))
43
+
44
+ (declare make-instance [[class Class] --> [instance Class]])
45
+
46
+ (define make-instance
47
+ Class -> (let ClassDef (get-prop Class classdef [])
48
+ (if (empty? ClassDef)
49
+ (error "class ~A does not exist~%" Class)
50
+ ClassDef)))
51
+
52
+ (declare get-value [[attribute Class A] --> [instance Class] --> A])
53
+
54
+ (define get-value
55
+ Attribute Instance -> (let LookUp (assoc Attribute Instance)
56
+ (get-value-test LookUp)))
57
+
58
+ (define get-value-test
59
+ [ ] -> (error "no such attribute!~%")
60
+ [_ | fail!] -> (error "no such value!~%")
61
+ [_ | Value] -> Value)
62
+
63
+ (declare has-value? [[attribute Class A] --> [instance Class] --> boolean])
64
+
65
+ (define has-value?
66
+ Attribute Instance -> (let LookUp (assoc Attribute Instance)
67
+ (has-value-test LookUp)))
68
+
69
+ (define has-value-test
70
+ [ ] -> (error "no such attribute!~%")
71
+ [_ | fail!] -> false
72
+ _ -> true)
73
+
74
+ (declare has-attribute? [symbol --> [instance Class] --> boolean])
75
+
76
+ (define has-attribute?
77
+ Attribute Instance -> (let LookUp (assoc Attribute Instance)
78
+ (not (empty? LookUp))))
79
+
80
+ (declare change-value [[instance Class] --> [attribute Class A] --> A --> [instance Class]])
81
+
82
+ (define change-value
83
+ _ class _ -> (error "cannot change the class of an instance!~%")
84
+ [ ] _ _ -> (error "no such attribute!~%")
85
+ [[Attribute | _] | Instance] Attribute Value
86
+ -> [[Attribute | Value] | Instance]
87
+ [Slot | Instance] Attribute Value
88
+ -> [Slot | (change-value Instance Attribute Value)])
89
+
90
+ (declare instance-of [[instance Class] --> [class Class]])
91
+
92
+ (define instance-of
93
+ [[class | Class] | _] -> Class
94
+ _ -> (error "not a class instance!"))
@@ -1,100 +1,100 @@
1
- (declare defclass [symbol --> [list [class A]] --> [list [symbol * symbol]] --> symbol])
2
-
3
- (datatype subtype
4
-
5
- (subtype B A); X : B;
6
- _____________________
7
- X : A;)
8
-
9
- (define defclass
10
- Class SuperClasses ClassDef
11
- -> (let Attributes (map fst ClassDef)
12
- Inherited (put-prop Class attributes
13
- (append Attributes (collect-attributes SuperClasses)))
14
- Types (record-attribute-types Class ClassDef)
15
- Assoc (map (/. Attribute [Attribute | fail!]) Inherited)
16
- ClassDef [[class | Class] | Assoc]
17
- Store (put-prop Class classdef ClassDef)
18
- RecordClass (axiom Class Class [class Class])
19
- SubTypes (record-subtypes Class SuperClasses)
20
- Class))
21
-
22
- (define record-subtypes
23
- _ [] -> _
24
- Class SuperClasses -> (eval [datatype (concat Class superclasses)
25
- | (record-subtypes-help Class SuperClasses)]))
26
-
27
- (define record-subtypes-help
28
- _ [] -> []
29
- Class [SuperClass | SuperClasses] -> [_______________________
30
- [subtype SuperClass Class]; |
31
- (record-subtypes-help Class SuperClasses)])
32
-
33
- (define collect-attributes
34
- [] -> []
35
- [SuperClass | SuperClasses] -> (append (get-prop SuperClass attributes [])
36
- (collect-attributes SuperClasses)))
37
-
38
- (define axiom
39
- DataType X A -> (eval [datatype DataType
40
- ________
41
- X : A;]))
42
-
43
- (define record-attribute-types
44
- _ [] -> []
45
- Class [(@p Attribute Type) | ClassDef]
46
- -> (let DataTypeName (concat Class Attribute)
47
- DataType (axiom DataTypeName Attribute [attribute Class Type])
48
- (record-attribute-types Class ClassDef)))
49
-
50
- (declare make-instance [[class Class] --> [instance Class]])
51
-
52
- (define make-instance
53
- Class -> (let ClassDef (get-prop Class classdef [])
54
- (if (empty? ClassDef)
55
- (error "class ~A does not exist~%" Class)
56
- ClassDef)))
57
-
58
- (declare get-value [[attribute Class A] --> [instance Class] --> A])
59
-
60
- (define get-value
61
- Attribute Instance -> (let LookUp (assoc Attribute Instance)
62
- (get-value-test LookUp)))
63
-
64
- (define get-value-test
65
- [ ] -> (error "no such attribute!~%")
66
- [_ | fail!] -> (error "no such value!~%")
67
- [_ | Value] -> Value)
68
-
69
- (declare has-value? [[attribute Class A] --> [instance Class] --> boolean])
70
-
71
- (define has-value?
72
- Attribute Instance -> (let LookUp (assoc Attribute Instance)
73
- (has-value-test LookUp)))
74
-
75
- (define has-value-test
76
- [ ] -> (error "no such attribute!~%")
77
- [_ | fail!] -> false
78
- _ -> true)
79
-
80
- (declare has-attribute? [symbol --> [instance Class] --> boolean])
81
-
82
- (define has-attribute?
83
- Attribute Instance -> (let LookUp (assoc Attribute Instance)
84
- (not (empty? LookUp))))
85
-
86
- (declare change-value [[instance Class] --> [attribute Class A] --> A --> [instance Class]])
87
-
88
- (define change-value
89
- _ class _ -> (error "cannot change the class of an instance!~%")
90
- [ ] _ _ -> (error "no such attribute!~%")
91
- [[Attribute | _] | Instance] Attribute Value
92
- -> [[Attribute | Value] | Instance]
93
- [Slot | Instance] Attribute Value
94
- -> [Slot | (change-value Instance Attribute Value)])
95
-
96
- (declare instance-of [[instance Class] --> [class Class]])
97
-
98
- (define instance-of
99
- [[class | Class] | _] -> Class
100
- _ -> (error "not a class instance!"))
1
+ (declare defclass [symbol --> [list [class A]] --> [list [symbol * symbol]] --> symbol])
2
+
3
+ (datatype subtype
4
+
5
+ (subtype B A); X : B;
6
+ _____________________
7
+ X : A;)
8
+
9
+ (define defclass
10
+ Class SuperClasses ClassDef
11
+ -> (let Attributes (map fst ClassDef)
12
+ Inherited (put-prop Class attributes
13
+ (append Attributes (collect-attributes SuperClasses)))
14
+ Types (record-attribute-types Class ClassDef)
15
+ Assoc (map (/. Attribute [Attribute | fail!]) Inherited)
16
+ ClassDef [[class | Class] | Assoc]
17
+ Store (put-prop Class classdef ClassDef)
18
+ RecordClass (axiom Class Class [class Class])
19
+ SubTypes (record-subtypes Class SuperClasses)
20
+ Class))
21
+
22
+ (define record-subtypes
23
+ _ [] -> _
24
+ Class SuperClasses -> (eval [datatype (concat Class superclasses)
25
+ | (record-subtypes-help Class SuperClasses)]))
26
+
27
+ (define record-subtypes-help
28
+ _ [] -> []
29
+ Class [SuperClass | SuperClasses] -> [_______________________
30
+ [subtype SuperClass Class]; |
31
+ (record-subtypes-help Class SuperClasses)])
32
+
33
+ (define collect-attributes
34
+ [] -> []
35
+ [SuperClass | SuperClasses] -> (append (get-prop SuperClass attributes [])
36
+ (collect-attributes SuperClasses)))
37
+
38
+ (define axiom
39
+ DataType X A -> (eval [datatype DataType
40
+ ________
41
+ X : A;]))
42
+
43
+ (define record-attribute-types
44
+ _ [] -> []
45
+ Class [(@p Attribute Type) | ClassDef]
46
+ -> (let DataTypeName (concat Class Attribute)
47
+ DataType (axiom DataTypeName Attribute [attribute Class Type])
48
+ (record-attribute-types Class ClassDef)))
49
+
50
+ (declare make-instance [[class Class] --> [instance Class]])
51
+
52
+ (define make-instance
53
+ Class -> (let ClassDef (get-prop Class classdef [])
54
+ (if (empty? ClassDef)
55
+ (error "class ~A does not exist~%" Class)
56
+ ClassDef)))
57
+
58
+ (declare get-value [[attribute Class A] --> [instance Class] --> A])
59
+
60
+ (define get-value
61
+ Attribute Instance -> (let LookUp (assoc Attribute Instance)
62
+ (get-value-test LookUp)))
63
+
64
+ (define get-value-test
65
+ [ ] -> (error "no such attribute!~%")
66
+ [_ | fail!] -> (error "no such value!~%")
67
+ [_ | Value] -> Value)
68
+
69
+ (declare has-value? [[attribute Class A] --> [instance Class] --> boolean])
70
+
71
+ (define has-value?
72
+ Attribute Instance -> (let LookUp (assoc Attribute Instance)
73
+ (has-value-test LookUp)))
74
+
75
+ (define has-value-test
76
+ [ ] -> (error "no such attribute!~%")
77
+ [_ | fail!] -> false
78
+ _ -> true)
79
+
80
+ (declare has-attribute? [symbol --> [instance Class] --> boolean])
81
+
82
+ (define has-attribute?
83
+ Attribute Instance -> (let LookUp (assoc Attribute Instance)
84
+ (not (empty? LookUp))))
85
+
86
+ (declare change-value [[instance Class] --> [attribute Class A] --> A --> [instance Class]])
87
+
88
+ (define change-value
89
+ _ class _ -> (error "cannot change the class of an instance!~%")
90
+ [ ] _ _ -> (error "no such attribute!~%")
91
+ [[Attribute | _] | Instance] Attribute Value
92
+ -> [[Attribute | Value] | Instance]
93
+ [Slot | Instance] Attribute Value
94
+ -> [Slot | (change-value Instance Attribute Value)])
95
+
96
+ (declare instance-of [[instance Class] --> [class Class]])
97
+
98
+ (define instance-of
99
+ [[class | Class] | _] -> Class
100
+ _ -> (error "not a class instance!"))
@@ -1,74 +1,74 @@
1
- (declare defclass [symbol --> [list [symbol * symbol]] --> symbol])
2
-
3
- (define defclass
4
- Class ClassDef -> (let Attributes (map (function fst) ClassDef)
5
- Types (record-attribute-types Class ClassDef)
6
- Assoc (map (/. Attribute [Attribute | fail]) Attributes)
7
- ClassDef [[class | Class] | Assoc]
8
- Store (put Class classdef ClassDef)
9
- RecordClass (axiom Class Class [class Class])
10
- Class))
11
-
12
- (define axiom
13
- DataType X A -> (eval [datatype DataType
14
- ________
15
- X : A;]))
16
-
17
- (define record-attribute-types
18
- _ [] -> []
19
- Class [(@p Attribute Type) | ClassDef]
20
- -> (let DataTypeName (concat Class Attribute)
21
- DataType (axiom DataTypeName Attribute [attribute Class Type])
22
- (record-attribute-types Class ClassDef)))
23
-
24
- (declare make-instance [[class Class] --> [instance Class]])
25
-
26
- (define make-instance
27
- Class -> (let ClassDef (trap-error (get Class classdef) (/. E []))
28
- (if (empty? ClassDef)
29
- (error "class ~A does not exist~%" Class)
30
- ClassDef)))
31
-
32
- (declare get-value [[attribute Class A] --> [instance Class] --> A])
33
-
34
- (define get-value
35
- Attribute Instance -> (let LookUp (assoc Attribute Instance)
36
- (get-value-test LookUp)))
37
-
38
- (define get-value-test
39
- [ ] -> (error "no such attribute!~%")
40
- [_ | fail!] -> (error "no such value!~%")
41
- [_ | Value] -> Value)
42
-
43
- (declare has-value? [[attribute Class A] --> [instance Class] --> boolean])
44
-
45
- (define has-value?
46
- Attribute Instance -> (let LookUp (assoc Attribute Instance)
47
- (has-value-test LookUp)))
48
-
49
- (define has-value-test
50
- [ ] -> (error "no such attribute!~%")
51
- [_ | fail] -> false
52
- _ -> true)
53
-
54
- (declare has-attribute? [symbol --> [instance Class] --> boolean])
55
-
56
- (define has-attribute?
57
- Attribute Instance -> (let LookUp (assoc Attribute Instance)
58
- (not (empty? LookUp))))
59
-
60
- (declare change-value [[instance Class] --> [attribute Class A] --> A --> [instance Class]])
61
-
62
- (define change-value
63
- _ class _ -> (error "cannot change the class of an instance!~%")
64
- [ ] _ _ -> (error "no such attribute!~%")
65
- [[Attribute | _] | Instance] Attribute Value
66
- -> [[Attribute | Value] | Instance]
67
- [Slot | Instance] Attribute Value
68
- -> [Slot | (change-value Instance Attribute Value)])
69
-
70
- (declare instance-of [[instance Class] --> [class Class]])
71
-
72
- (define instance-of
73
- [[class | Class] | _] -> Class
74
- _ -> (error "not a class instance!"))
1
+ (declare defclass [symbol --> [list [symbol * symbol]] --> symbol])
2
+
3
+ (define defclass
4
+ Class ClassDef -> (let Attributes (map (function fst) ClassDef)
5
+ Types (record-attribute-types Class ClassDef)
6
+ Assoc (map (/. Attribute [Attribute | fail]) Attributes)
7
+ ClassDef [[class | Class] | Assoc]
8
+ Store (put Class classdef ClassDef)
9
+ RecordClass (axiom Class Class [class Class])
10
+ Class))
11
+
12
+ (define axiom
13
+ DataType X A -> (eval [datatype DataType
14
+ ________
15
+ X : A;]))
16
+
17
+ (define record-attribute-types
18
+ _ [] -> []
19
+ Class [(@p Attribute Type) | ClassDef]
20
+ -> (let DataTypeName (concat Class Attribute)
21
+ DataType (axiom DataTypeName Attribute [attribute Class Type])
22
+ (record-attribute-types Class ClassDef)))
23
+
24
+ (declare make-instance [[class Class] --> [instance Class]])
25
+
26
+ (define make-instance
27
+ Class -> (let ClassDef (trap-error (get Class classdef) (/. E []))
28
+ (if (empty? ClassDef)
29
+ (error "class ~A does not exist~%" Class)
30
+ ClassDef)))
31
+
32
+ (declare get-value [[attribute Class A] --> [instance Class] --> A])
33
+
34
+ (define get-value
35
+ Attribute Instance -> (let LookUp (assoc Attribute Instance)
36
+ (get-value-test LookUp)))
37
+
38
+ (define get-value-test
39
+ [ ] -> (error "no such attribute!~%")
40
+ [_ | fail!] -> (error "no such value!~%")
41
+ [_ | Value] -> Value)
42
+
43
+ (declare has-value? [[attribute Class A] --> [instance Class] --> boolean])
44
+
45
+ (define has-value?
46
+ Attribute Instance -> (let LookUp (assoc Attribute Instance)
47
+ (has-value-test LookUp)))
48
+
49
+ (define has-value-test
50
+ [ ] -> (error "no such attribute!~%")
51
+ [_ | fail] -> false
52
+ _ -> true)
53
+
54
+ (declare has-attribute? [symbol --> [instance Class] --> boolean])
55
+
56
+ (define has-attribute?
57
+ Attribute Instance -> (let LookUp (assoc Attribute Instance)
58
+ (not (empty? LookUp))))
59
+
60
+ (declare change-value [[instance Class] --> [attribute Class A] --> A --> [instance Class]])
61
+
62
+ (define change-value
63
+ _ class _ -> (error "cannot change the class of an instance!~%")
64
+ [ ] _ _ -> (error "no such attribute!~%")
65
+ [[Attribute | _] | Instance] Attribute Value
66
+ -> [[Attribute | Value] | Instance]
67
+ [Slot | Instance] Attribute Value
68
+ -> [Slot | (change-value Instance Attribute Value)])
69
+
70
+ (declare instance-of [[instance Class] --> [class Class]])
71
+
72
+ (define instance-of
73
+ [[class | Class] | _] -> Class
74
+ _ -> (error "not a class instance!"))