31 lines
1.1 KiB
Plaintext
31 lines
1.1 KiB
Plaintext
IMPLEMENTATION ListFunc
|
|
|
|
IMPORT Seq COMPLETELY
|
|
IMPORT Nat COMPLETELY
|
|
|
|
FUN myReduce : (nat**nat->nat)**nat->seq[nat]->nat
|
|
DEF myReduce == \\f,e. \\s. IF <>?(s) THEN e
|
|
ELSE f(ft(s),myReduce(f,e)(rt(s)))
|
|
FI
|
|
|
|
FUN myZip : (nat**nat->nat)->seq[nat]**seq[nat]->seq[nat]
|
|
DEF myZip == \\f. \\s1,s2. IF <>?(s1) or <>?(s2) THEN <>
|
|
ELSE f(ft(s1),ft(s2))::myZip(f)(rt(s1),rt(s2))
|
|
FI
|
|
|
|
FUN myFold : (nat**nat->nat)**nat->seq[nat]->nat
|
|
DEF myFold == \\f,e. \\s. IF <>?(s) THEN e
|
|
ELSE myFold(f,f(e,ft(s)))(rt(s))
|
|
FI
|
|
|
|
FUN newfD : seq[nat]->nat
|
|
DEF newfD == \\s. myFold(-,2*ft(s))(s)
|
|
|
|
FUN testfunc : nat**nat**nat->nat
|
|
DEF testfunc == \\a,b,c. a+b-c
|
|
|
|
FUN zip3 : (nat**nat**nat->nat)->seq[nat]**seq[nat]**seq[nat]->seq[nat]
|
|
DEF zip3 == \\f. \\s1,s2,s3. IF <>?(s1) or (<>?(s2) or <>?(s3)) THEN <>
|
|
ELSE f(ft(s1),ft(s2),ft(s3))::zip3(f)(rt(s1),rt(s2),rt(s3))
|
|
FI
|