tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
31
Task/Parametric-polymorphism/E/parametric-polymorphism-1.e
Normal file
31
Task/Parametric-polymorphism/E/parametric-polymorphism-1.e
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
interface TreeAny guards TreeStamp {}
|
||||
def Tree {
|
||||
to get(Value) {
|
||||
def Tree1 {
|
||||
to coerce(specimen, ejector) {
|
||||
def tree := TreeAny.coerce(specimen, ejector)
|
||||
if (tree.valueType() != Value) {
|
||||
throw.eject(ejector, "Tree value type mismatch")
|
||||
}
|
||||
return tree
|
||||
}
|
||||
}
|
||||
return Tree1
|
||||
}
|
||||
}
|
||||
|
||||
def makeTree(T, var value :T, left :nullOk[Tree[T]], right :nullOk[Tree[T]]) {
|
||||
def tree implements TreeStamp {
|
||||
to valueType() { return T }
|
||||
to map(f) {
|
||||
value := f(value) # the declaration of value causes this to be checked
|
||||
if (left != null) {
|
||||
left.map(f)
|
||||
}
|
||||
if (right != null) {
|
||||
right.map(f)
|
||||
}
|
||||
}
|
||||
}
|
||||
return tree
|
||||
}
|
||||
11
Task/Parametric-polymorphism/E/parametric-polymorphism-2.e
Normal file
11
Task/Parametric-polymorphism/E/parametric-polymorphism-2.e
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
? def t := makeTree(int, 0, null, null)
|
||||
# value: <tree>
|
||||
|
||||
? t :Tree[String]
|
||||
# problem: Tree value type mismatch
|
||||
|
||||
? t :Tree[Int]
|
||||
# problem: Failed: Undefined variable: Int
|
||||
|
||||
? t :Tree[int]
|
||||
# value: <tree>
|
||||
Loading…
Add table
Add a link
Reference in a new issue