view modules/range.tp @ 347:ff7ea11b4b60

Add length method to executable bytearrays
author Michael Pavone <pavone@retrodev.com>
date Fri, 10 Apr 2015 00:48:12 -0700
parents 21e20c9bb2ba
children
line wrap: on
line source
#{
	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 }
}