Skip to content

Instantly share code, notes, and snippets.

@adolfopa
Created February 10, 2017 23:36
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adolfopa/64a1a59c28cbd77b71449d68f4c36dc0 to your computer and use it in GitHub Desktop.
Save adolfopa/64a1a59c28cbd77b71449d68f4c36dc0 to your computer and use it in GitHub Desktop.
Implementation of some higher order functions in Forth
: -range ( a-addr1 u -- a-addr2 a-addr1 )
cells over + ;
: range ( a-addr1 u -- a-addr1 a-addr2)
-range swap ;
: map! ( xt a-addr u -- )
range ?do i @ over execute i ! cell +loop ;
: foldl ( xt w1 a-addr u2 -- w2 )
2over drop >r range ?do i @ j execute cell +loop r> drop ;
: foldr ( xt w1 a-addr u2 -- w3 )
2over drop >r -range ?do j i @ execute cell negate +loop r> drop ;
: reduce ( xt a-addr u1 -- w )
over @ -rot foldl ;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment