Skip to content

Instantly share code, notes, and snippets.

@robotlolita
Created July 28, 2015 18:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robotlolita/eea36446066486903bff to your computer and use it in GitHub Desktop.
Save robotlolita/eea36446066486903bff to your computer and use it in GitHub Desktop.
var Fizz = {
toString: function(){ return 'Fizz' }
}
var Buzz = {
toString: function(){ return 'Buzz' }
}
var FizzBuzz = {
toString: function(){ return 'FizzBuzz' }
}
function fizzbuzz(n) {
return n % 15 === 0? FizzBuzz
: n % 3 === 0? Fizz
: n % 5 === 0? Buzz
: /* _ */ n
}
function iterate(n, f) {
return [n, () => iterate(n, f(n))]
}
function map(f, xs) {
if (xs.length === 0) {
return null
} else {
var [h, t] = xs;
return [f(h), map(f, t())]
}
}
function take(n, xs) {
if (n === 0 || xs.length === 0) {
return null
} else {
var [h, t] = xs;
return [h, take(n - 1, t())]
}
}
function toArray(xs) {
if (xs.length === 0) {
return []
} else {
var [h, t] = xs;
return [h].concat(toArray(t()))
}
}
function range(start, end) {
if (start === end) {
return []
} else {
return [start].concat(range(start, end))
}
}
// -- iterative
range(1, 100).map(fizzbuzz).join(', ')
// -- Corecursive
var nats = iterate(0, x => x + 1)
toArray(take(100, map(fizzbuzz, nats))).join(', ')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment