shen-ruby 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
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!"))