Mercurial > repos > tabletprog
diff modules/range.tp @ 343:21e20c9bb2ba
Added range module and sample
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 05 Apr 2015 23:35:05 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/range.tp Sun Apr 05 23:35:05 2015 -0700 @@ -0,0 +1,64 @@ +#{ + from:to:by <- :_from :_to :_by { + #{ + from <- { _from } + to <- { _to } + by <- { _by } + + legnth <- { (_to - _from) / _by } + + get <- :idx { _to + idx * _by} + + array <- { + fold: #[] with: :acc el { + acc append: el + } + } + + list <- { + map: :el { el } + } + + map <- :fun { + foldr: [] with: :acc el { + (fun: el) | acc + } + } + + foldr:with <- :acc :fun { + cur <- _from + ((_to - _from) / _by) * _by + while: { cur >= _from } do: { + acc <- fun: acc cur + + cur <- cur - _by + } + acc + } + + fold:with <- :acc :fun { + cur <- _from + while: { cur < _to } do: { + acc <- fun: acc cur + + cur <- cur + _by + } + acc + } + + foreach <- :fun { + idx <- 0 + cur <- _from + res <- cur + while: { cur < _to} do: { + res <- fun: idx cur + + idx <- idx + 1 + cur <- cur + _by + } + res + } + } + } + + from:to <- :f :t { from: f to: t by: 1 } +} \ No newline at end of file