File tree Expand file tree Collapse file tree 3 files changed +43
-1
lines changed Expand file tree Collapse file tree 3 files changed +43
-1
lines changed Original file line number Diff line number Diff line change
1
+ public protocol Hyperoperable : Equatable , Operable {
2
+ mutating func hyperoperateUpon(
3
+ atLevel givenLevel: Self ,
4
+ by givenOperametrum: Self
5
+ )
6
+ }
7
+
8
+ extension Hyperoperable {
9
+ public func hyperoperatedUpon(
10
+ atLevel givenLevel: Self ,
11
+ by givenOperametrum: Self
12
+ ) -> Self {
13
+ var operatum = self
14
+ operatum. hyperoperateUpon ( atLevel: givenLevel, by: givenOperametrum)
15
+ return operatum
16
+ }
17
+ }
Original file line number Diff line number Diff line change @@ -34,7 +34,7 @@ extension Quantity: Equatable {
34
34
}
35
35
}
36
36
37
- extension Quantity : Operable {
37
+ extension Quantity : Hyperoperable {
38
38
public mutating func succeed( ) {
39
39
let newElement = self . embodiment. first ?? Quantity . standardEmbodyingElement
40
40
self . embodiment. append ( newElement)
@@ -45,6 +45,15 @@ extension Quantity: Operable {
45
45
46
46
self . embodiment. removeLast ( )
47
47
}
48
+
49
+ public mutating func hyperoperateUpon(
50
+ atLevel givenLevel: Quantity ,
51
+ by givenOperametrum: Quantity
52
+ ) {
53
+ if ( givenLevel == Quantity . none) { return self . succeed ( ) }
54
+
55
+ fatalError ( " Higher-level operations not yet defined " )
56
+ }
48
57
}
49
58
50
59
extension String {
Original file line number Diff line number Diff line change @@ -62,3 +62,19 @@ func predecessorOfQuantity(_ givenCount: Int) async throws {
62
62
let precededQuantity = operativeQuantity. predecessor
63
63
#expect( precededCount. represents ( precededQuantity) )
64
64
}
65
+
66
+ @Test ( " Operatrum-agnostic charateristics of level 0 hyperoperation " , arguments: [
67
+ Quantity ( " " ) !,
68
+ Quantity ( " | " ) !,
69
+ Quantity ( " || " ) !
70
+ ] )
71
+ func hyperoperationAtLevel0( _ givenOperametrum: Quantity ) async throws {
72
+ let zero = 0 . asQuantity
73
+ let ten = 10 . asQuantity
74
+
75
+ let eleven = ten. hyperoperatedUpon ( atLevel: zero, by: givenOperametrum)
76
+ let twelve = eleven. hyperoperatedUpon ( atLevel: zero, by: givenOperametrum)
77
+
78
+ #expect( 11 . represents ( eleven) )
79
+ #expect( 12 . represents ( twelve) )
80
+ }
You can’t perform that action at this time.
0 commit comments