view modules/list.tp @ 173:158444b77c09

Added foreach, string and print to list objects
author Mike Pavone <pavone@retrodev.com>
date Wed, 21 Aug 2013 08:00:09 -0700
parents 18598163e3ef
children 7e313849ab41
line wrap: on
line source

{
	_empty <- #{
		length <- { 0 }
		empty? <- { true }
		fold:with <- :acc :fun { acc }
		foldr:with <- :acc :fun { acc }
		map <- :fun { self }
		| <- :val {
			list node: val withTail: self
		}
		. <- :right { right }
		string <- { "[]" }
		print <- { print: string }
	}
	#{
		empty <- { _empty }
		node:withTail <- :_val :_tail {
			#{
				value <- { _val }
				tail <- { _tail }
				empty? <- { false }
				length <- {
					fold: 0 with: :acc val { acc + 1 }
				}
				fold:with <- :acc :fun {
					cur <- self
					while: { not: (cur empty?)} do: {
						acc <- fun: acc (cur value)
						cur <- cur tail
					}
					acc
				}
				foldr:with <- :acc fun {
					fun: (_tail foldr: acc with: fun) _val
				}
				map <- :fun {
					node: (fun: _val) withTail: (_tail map: fun)
				}
				foreach <- :self fun {
					fold: 0 with: :idx el{
						fun: idx el
						idx + 1
					}
					self
				}
				| <- :val {
					node: val withTail: self
				}
				. <- :right {
					foldr: right with: :tail val {
						node: val withTail: tail
					}
				}
				string <- {
					(fold: "[\n" with: :acc el {
						acc . "	" . (string: el) . "\n"
					}) . "]"
				}
				print <- {
					print: "[\n"
					foreach: :_ el {
						print: "	" . (string: el) . "\n"
					}
					print: "]"
				}
			}
		}
	}
}