Skip to content

Instantly share code, notes, and snippets.

@irisjae
Last active October 30, 2018 16:57
Show Gist options
  • Save irisjae/bdefa06ed111013da185a2bba45482b1 to your computer and use it in GitHub Desktop.
Save irisjae/bdefa06ed111013da185a2bba45482b1 to your computer and use it in GitHub Desktop.
Polyfilling declarative-style name binding for js
//first draft
var where = where_fn => where_fn ()
where ((
even = n =>
!! (n === 0)
? true
: odd (n - 1),
odd = n =>
!! (n === 0)
? false
: even (n - 1) ) =>
console .log (n - 1) )
//various experiments
var given = given_form => given_form ()
given (
(odd, even) => ($=>
console .log (even (10))
) (
odd = n =>
!! (n === 0)
? false
: even (n - 1),
even = n =>
!! (n === 0)
? true
: odd (n - 1) ) )
//current draft
//TODO: look for where and take in fn_form instead
var so = fn_form =>
!! (fn_form .toString () .endsWith ('=>_'))
? fn_form () ()
: fn_form ()
so ((_=_=>
console .log (even (121)),
where
, odd = n =>
!! (n === 0)
? false
: even (n - 1)
, even = n =>
!! (n === 0)
? true
: odd (n - 1) )=>_)
so ((
take
, odd = n =>
!! (n === 0)
? false
: even (n - 1)
, even = n =>
!! (n === 0)
? true
: odd (n - 1) )=>
console .log (even (120)) )
@irisjae
Copy link
Author

irisjae commented Oct 30, 2018

Actually wheres can also support arbitrary orders within the where clauses. simply recall the function, supplying appropriate parameters to suppress values not yet obtained, and repeat until all values are obtained.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment