m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/good/eachToEach.mim
diff options
context:
space:
mode:
Diffstat (limited to 'good/eachToEach.mim')
-rw-r--r--good/eachToEach.mim24
1 files changed, 24 insertions, 0 deletions
diff --git a/good/eachToEach.mim b/good/eachToEach.mim
new file mode 100644
index 0000000..1bc7f05
--- /dev/null
+++ b/good/eachToEach.mim
@@ -0,0 +1,24 @@
+(letrec (concatN : [Int] -> [Int] -> [Int] l1 : [Int] l2 : [Int])
+ (if (isnil l1)
+ l2
+ (let (h) (head l1)
+ (let (t) (tail l1)
+ (cons h (concatN t l2)))))
+(letrec (concatMapN : (Int -> [Int]) -> [Int] -> [Int] f : (Int -> [Int]) l : [Int])
+ (if (isnil l)
+ (nil : [Int])
+ (let (h) (head l)
+ (let (t) (tail l)
+ (concatN (f h) (concatMapN f t)))))
+(letrec (applyEachN : [Int -> Int] -> Int -> [Int] fs : [Int -> Int] n : Int)
+ (if (isnil fs)
+ nil : [Int]
+ (let (hf) (head fs)
+ (let (tfs) (tail fs)
+ (cons (hf n) (applyEachN tfs n)))))
+(let (applyEachToEachN fs : [Int -> Int] l : [Int])
+ (concatMapN (applyEachN fs) l)
+(let (fs) (cons (lambda n : Int (+ n 2))
+ (cons (lambda n : Int (* n 2)) nil : [Int -> Int]))
+(let (list) (cons 1 (cons 2 (cons 3 nil : [Int])))
+(applyEachToEachN fs list)))))))