2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,14 +1,32 @@
|
|||
function range(begin, end) {
|
||||
for (let i = begin; i < end; ++i)
|
||||
yield i;
|
||||
}
|
||||
// USING A LIST MONAD DIRECTLY, WITHOUT SPECIAL SYNTAX FOR LIST COMPREHENSIONS
|
||||
|
||||
function triples(n) {
|
||||
return [[x,y,z] for each (x in range(1,n+1))
|
||||
for each (y in range(x,n+1))
|
||||
for each (z in range(y,n+1))
|
||||
if (x*x + y*y == z*z) ]
|
||||
}
|
||||
(function (n) {
|
||||
|
||||
for each (var triple in triples(20))
|
||||
print(triple);
|
||||
return mb(r(1, n), function (x) { // x <- [1..n]
|
||||
return mb(r(1 + x, n), function (y) { // y <- [1+x..n]
|
||||
return mb(r(1 + y, n), function (z) { // z <- [1+y..n]
|
||||
|
||||
return x * x + y * y === z * z ? [[x, y, z]] : [];
|
||||
|
||||
})})});
|
||||
|
||||
|
||||
// LIBRARY FUNCTIONS
|
||||
|
||||
// Monadic bind for lists
|
||||
function mb(xs, f) {
|
||||
return [].concat.apply([], xs.map(f));
|
||||
}
|
||||
|
||||
// Monadic return for lists is simply lambda x -> [x]
|
||||
// as in [[x, y, z]] : [] above
|
||||
|
||||
// Integer range [m..n]
|
||||
function r(m, n) {
|
||||
return Array.apply(null, Array(n - m + 1))
|
||||
.map(function (n, x) {
|
||||
return m + x;
|
||||
});
|
||||
}
|
||||
|
||||
})(100);
|
||||
|
|
|
|||
|
|
@ -1,31 +1,14 @@
|
|||
(function(n) {
|
||||
function range(begin, end) {
|
||||
for (let i = begin; i < end; ++i)
|
||||
yield i;
|
||||
}
|
||||
|
||||
// USING A LIST MONAD DIRECTLY, WITHOUT LIST COMPREHENSION NOTATION
|
||||
function triples(n) {
|
||||
return [[x,y,z] for each (x in range(1,n+1))
|
||||
for each (y in range(x,n+1))
|
||||
for each (z in range(y,n+1))
|
||||
if (x*x + y*y == z*z) ]
|
||||
}
|
||||
|
||||
return mb( rng(1, n), function(x) {
|
||||
return mb( rng(1 + x, n), function(y) {
|
||||
return mb( rng(1 + y, n), function(z) {
|
||||
|
||||
return ( x * x + y * y === z * z ) ? mReturn([x, y, z]) : [];
|
||||
|
||||
})})});
|
||||
|
||||
/******************************************************************/
|
||||
|
||||
// Monadic bind (chain) for lists
|
||||
function mb(xs, f) {
|
||||
return [].concat.apply([], xs.map(f));
|
||||
}
|
||||
|
||||
// Monadic return (inject) for lists
|
||||
function mReturn(a) {
|
||||
return [a];
|
||||
}
|
||||
|
||||
function rng(m, n) {
|
||||
return Array.apply(null, Array(n - m + 1)).map(
|
||||
function (x, i) { return m + i; }
|
||||
);
|
||||
}
|
||||
|
||||
})(100);
|
||||
for each (var triple in triples(20))
|
||||
print(triple);
|
||||
|
|
|
|||
18
Task/List-comprehensions/JavaScript/list-comprehensions-3.js
Normal file
18
Task/List-comprehensions/JavaScript/list-comprehensions-3.js
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
(n => {
|
||||
|
||||
let flatMap = (xs, f) => [].concat.apply([], xs.map(f)),
|
||||
|
||||
range = (m, n) => Array.from({
|
||||
length: (n - m) + 1
|
||||
}, (_, i) => m + i);
|
||||
|
||||
|
||||
return flatMap(range(1, n), (x) =>
|
||||
flatMap(range(1 + x, n), (y) =>
|
||||
flatMap(range(1 + y, n), (z) =>
|
||||
x * x + y * y === z * z ? [
|
||||
[x, y, z]
|
||||
] : []
|
||||
)));
|
||||
|
||||
})(20);
|
||||
Loading…
Add table
Add a link
Reference in a new issue