view code/mike00.lm @ 14:ce68c8a607ee

Added a new file for experimenting with some helper functions
author Michael Pavone <pavone@retrodev.com>
date Fri, 25 Jul 2014 21:04:14 -0700
parents
children 89aa6d3165ee
line wrap: on
line source

#{
	length <- :lst {
		len <- []
		while: { not: (lst isInteger?)} do: {
			lst <- lst tail
			len <- len + 1
		}
		len
	}
	
	reverse <- :lst {
		new <- []
		while: { not: (lst isInteger?)} do: {
			new <- (lst value) | new
			lst <- lst tail
		}
		new
	}

	split:at <- :lst :pos {
		first <- []
		i <- 0
		while: { i < pos } do: {
			first <- (lst value) | first
			lst <- lst tail
			i <- i + 1
		}
		#[(reverse: first) lst]
	}
	
	map <- :lst fun {
		new <- []
		while: { not: (lst isInteger?) } do: {
			new <- (fun: (lst value)) | new
			lst <- lst tail
		}
		reverse: new
	}
	
	makeTree <- :lst size {
		ret <- 0
		sub <- 0
		half <- size / 2
		if: size = 2 {
			ret <- #[(lst value) ((lst tail) value)]
		} else: {
			if: size = 1 {
				ret <- lst
			} else: {
				sub <- split: lst at: half
				ret <- #[
					(makeTree: (sub value) half)
					(makeTree: (sub tail) size-half)
				]
			}
		}
		ret
	}
	
	get:fromTree:size <- :idx :tree :size {
		ret <- 0
		half <- size / 2
		if: size <= 2 {
			if: idx = 0 {
				ret <- tree value
			} else: {	
				ret <- tree tail
			}
		} else: {
			if: idx < half {
				ret <- get: idx fromTree: (tree value) size: half
			} else: {
				ret <- get: idx-half fromTree: (tree tail) size: size-half
			}
		}
		ret
	}
	
	height <- 0
	width <- 0
	
	main <- {
		/* map <- initWorld value
		height <- map length
		width <- (map value) length
		*/
		
		lst <- [1 2 3 4 5 6 7 8 9]
		print: (length: lst)
		print: (map: lst :el { el + 1 })
		print: (split: lst at: (length: lst) / 2)
		tree <- makeTree: lst (length: lst)
		print: tree
	}
	
}