Family Day update
This commit is contained in:
parent
aac6731f2c
commit
9ad63ea473
2442 changed files with 39761 additions and 8255 deletions
38
Task/Ackermann-function/JavaScript/ackermann-function-5.js
Normal file
38
Task/Ackermann-function/JavaScript/ackermann-function-5.js
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
(() => {
|
||||
'use strict';
|
||||
|
||||
// ackermann :: Int -> Int -> Int
|
||||
const ackermann = m => n => {
|
||||
const go = (m, n) =>
|
||||
0 === m ? (
|
||||
succ(n)
|
||||
) : go(pred(m), 0 === n ? (
|
||||
1
|
||||
) : go(m, pred(n)));
|
||||
return go(m, n);
|
||||
};
|
||||
|
||||
// TEST -----------------------------------------------
|
||||
const main = () => console.log(JSON.stringify(
|
||||
[0, 1, 2, 3].map(
|
||||
flip(ackermann)(3)
|
||||
)
|
||||
));
|
||||
|
||||
|
||||
// GENERAL FUNCTIONS ----------------------------------
|
||||
|
||||
// flip :: (a -> b -> c) -> b -> a -> c
|
||||
const flip = f =>
|
||||
x => y => f(y)(x);
|
||||
|
||||
// pred :: Enum a => a -> a
|
||||
const pred = x => x - 1;
|
||||
|
||||
// succ :: Enum a => a -> a
|
||||
const succ = x => 1 + x;
|
||||
|
||||
|
||||
// MAIN ---
|
||||
return main();
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue