mirror of
				https://github.com/flynx/Course-JavaScript.git
				synced 2025-10-31 12:00:08 +00:00 
			
		
		
		
	refactored the bootstrap and added some new words...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									2fc89940c9
								
							
						
					
					
						commit
						22a22fd083
					
				| @ -120,6 +120,7 @@ function runCommand(){ | ||||
| 		var c = commands[commands.length-1] | ||||
| 		c.innerText = command.innerText | ||||
| 		c.focus() | ||||
| 		window.scrollTo(0,document.body.scrollHeight) | ||||
| 	}, false) | ||||
| 	 | ||||
| 	try{ | ||||
|  | ||||
							
								
								
									
										165
									
								
								Slang/slang.js
									
									
									
									
									
								
							
							
						
						
									
										165
									
								
								Slang/slang.js
									
									
									
									
									
								
							| @ -399,7 +399,7 @@ var NAMESPACE = { | ||||
| 		var e = context.stack.pop() | ||||
| 		if(i < 0){ | ||||
| 			var l = context.stack[context.stack.length-1] | ||||
| 			l.splice(l.length + i + 1, 0, e) | ||||
| 			l.splice(l.length + i, 0, e) | ||||
| 		} else { | ||||
| 			context.stack[context.stack.length-1].splice(i, 0, e) | ||||
| 		} | ||||
| @ -413,12 +413,13 @@ var NAMESPACE = { | ||||
| 		return context.stack[context.stack.length-1].length | ||||
| 	}, | ||||
| 	// b c -- b
 | ||||
| 	'each': function(context){ | ||||
| 	'map': function(context){ | ||||
| 		var c = context.stack.pop() | ||||
| 		var b = context.stack[context.stack.length-1] | ||||
| 		for(var i=0; i < b.length; i++){ | ||||
| 			// exec block in a separate context...
 | ||||
| 			var res = run({ | ||||
| 				//stack: [i, b[i], c],
 | ||||
| 				stack: [b[i], c], | ||||
| 				code: ['exec'], | ||||
| 				// NOTE: this can have side-effects on the context...
 | ||||
| @ -544,13 +545,69 @@ var BOOTSTRAP = [ | ||||
| ' not interpreted in any way.', | ||||
| '', | ||||
| '-------------------------------------------------------------------------------', | ||||
| '', | ||||
| 'Basic words for block manipulation:', | ||||
| '', | ||||
| 'Get block length', | ||||
| '		[ 1 2 3 ] len', | ||||
| '	Result:', | ||||
| '		3', | ||||
| '', | ||||
| 'Pop element form block tail', | ||||
| '		[ 1 2 3 ] pop', | ||||
| '	Result:', | ||||
| '		[ 1 2 ] 3', | ||||
| '', | ||||
| 'Push element to block tail', | ||||
| '		[ 1 2 3 ] 4 push', | ||||
| '	Result:', | ||||
| '		[ 1 2 3 4 ]', | ||||
| '', | ||||
| 'NOTE: all indexes can be negative values, these will indicate the', | ||||
| '	position relative to the tail, -1 being the last element.', | ||||
| '', | ||||
| 'Get element at position (0)', | ||||
| '		[ 1 2 3 ] -1 at', | ||||
| '	Result:', | ||||
| '		[ 1 2 3 ] 3', | ||||
| '', | ||||
| 'Put element (123) at position (0)', | ||||
| '		[ 1 2 3 ] 123 0 to', | ||||
| '	Result:', | ||||
| '		[ 123 2 3 ]', | ||||
| '', | ||||
| 'Put element (123) before position (0)', | ||||
| '		[ 1 2 3 ] 123 0 before', | ||||
| '	Result:', | ||||
| '		[ 123 1 2 3 ]', | ||||
| '', | ||||
| 'Expand block to stack -- "block 2 stack"', | ||||
| '		[ 1 2 3 ] b2s', | ||||
| '	Result:', | ||||
| '		1 2 3', | ||||
| '', | ||||
| '', | ||||
| '-------------------------------------------------------------------------------', | ||||
| 's2b drop', | ||||
| '--', | ||||
| '-- With that out of the way, let\'s start with the bootstrap...', | ||||
| '--', | ||||
| '-- make a new block instance shorthand...', | ||||
| ':: [] [ [ ] clone ]', | ||||
| '', | ||||
| '-- misc...', | ||||
| ':: . ( x -- ) [ drop ]', | ||||
| ':: .. ( x -- ) [ print drop ]', | ||||
| '', | ||||
| ':: ne ( a -- b ) [ eq not ]', | ||||
| ':: isT ( a -- b ) [ not not true eq ]', | ||||
| ':: isF ( a -- b ) [ not isT ]', | ||||
| '', | ||||
| ':: inc ( a -- b ) [ 1 add ]', | ||||
| ':: dec ( a -- b ) [ 1 sub ]', | ||||
| '', | ||||
| ':: ! ( a -- b ) [ [ dup 1 ne ] ? [ dup 1 sub ! mul ] ]', | ||||
| '', | ||||
| '', | ||||
| '', | ||||
| '-- Stack/code manipulation...', | ||||
| ':: _swap ( x | y -- y | x ) [ 1 1 _swapN ]', | ||||
| ':: _push ( x |  -- | x ) [ 0 _swapN ]', | ||||
| ':: _pull (  | x -- x |  ) [ 0 swap _swapN ]', | ||||
| @ -560,15 +617,16 @@ var BOOTSTRAP = [ | ||||
| '-- like exec but will run a block in current context...', | ||||
| ':: b2c [ len rot b2s tor 0 _swapN ]', | ||||
| '', | ||||
| ':: . ( x -- ) [ drop ]', | ||||
| ':: .. ( x -- ) [ print drop ]', | ||||
| '', | ||||
| ':: swap2 ( a _ b -- b _ a ) [ swap rot swap tor swap ]', | ||||
| ':: dup2 ( a b -- a b a b ) [ dup swap2 dup rot swap2 tor swap ]', | ||||
| '', | ||||
| ':: ne ( a -- b ) [ eq not ]', | ||||
| ':: isT ( a -- b ) [ not not true eq ]', | ||||
| ':: isF ( a -- b ) [ not isT ]', | ||||
| '-- this is here for devel use only', | ||||
| ':: _clear ( ... -- ) [ s2b print drop ] ', | ||||
| ':: _stack_size ( -- l ) [ s2b len swap b2s tor ] ', | ||||
| '', | ||||
| '', | ||||
| '', | ||||
| '-- Flow control...', | ||||
| '', | ||||
| '-- Classic conditional word:', | ||||
| '--   [ cond ] [ A ] [ B ] if', | ||||
| @ -601,12 +659,50 @@ var BOOTSTRAP = [ | ||||
| '		[ exec [ _run_then 1 ] and [ swap _run_else 2 ] or b2s 2 _swapN ]', | ||||
| '', | ||||
| '', | ||||
| '-- list/block 2\'nd gen stuff...', | ||||
| ':: push ( b e i -- b ) [ -1 before ]', | ||||
| '', | ||||
| '-- List/block 2\'nd gen stuff...', | ||||
| '-- make a new block instance shorthand...', | ||||
| ':: [] [ [ ] clone ]', | ||||
| '', | ||||
| '-- insert element after index...', | ||||
| ':: after ( b e i -- b ) [', | ||||
| '	-- special case, when at end, need to push the alement after it...', | ||||
| '	dup [ -1 eq ] ?', | ||||
| '		[ . push ]', | ||||
| '	else', | ||||
| '		[ inc before ] ]', | ||||
| '', | ||||
| '-- push element to tail of block...', | ||||
| ':: push ( b e -- b ) [ swap len rot swap tor to ]', | ||||
| '', | ||||
| '-- Filter the block via a condition...', | ||||
| '--', | ||||
| '-- the condition block must have the folowing stack effect: elem -- bool', | ||||
| ':: filter ( b c -- b ) [', | ||||
| '	-- prepare the condition...', | ||||
| '	\\ dup 0 before', | ||||
| '	-- define the template...', | ||||
| '	[ TEST ? [  ] else [ . ] ] clone', | ||||
| '		-- prepare the template...', | ||||
| '		swap 0 to', | ||||
| '			-- do the filtering', | ||||
| '			map ]', | ||||
| '', | ||||
| '-- Create a block containing a range numbers form 0 to n-1...', | ||||
| ':: range ( n -- b ) [', | ||||
| '	-- initial state...', | ||||
| '	[ dup isNumber ] ? ', | ||||
| '		[ [] swap ]', | ||||
| '	-- get first elem...', | ||||
| '	else', | ||||
| '		[ 0 at ]', | ||||
| '	-- we got to the end...', | ||||
| '	[ dup 0 eq ] ? ', | ||||
| '		[ drop ]', | ||||
| '	-- dec push new and continue...', | ||||
| '	else', | ||||
| '		[ 1 sub 0 before range ] ]', | ||||
| '', | ||||
| ':: inc ( a -- b ) [ 1 add ]', | ||||
| ':: dec ( a -- b ) [ 1 sub ]', | ||||
| '', | ||||
| '', | ||||
| '-- Meta-word examples (experimental)...', | ||||
| @ -646,29 +742,30 @@ var BOOTSTRAP = [ | ||||
| 'infix: > gt', | ||||
| '', | ||||
| '', | ||||
| '-- this is here for devel use only', | ||||
| ':: _clear ( ... -- ) [ s2b print drop ] ', | ||||
| ':: _stack_size ( -- l ) [ s2b len swap b2s tor ] ', | ||||
| '', | ||||
| '-- Tests and examples...', | ||||
| '', | ||||
| '-- tests and examples...', | ||||
| '-- Mandatory "hello word" word example...', | ||||
| ':: hi ( -- ) [ "Hello World!" print drop ]', | ||||
| ':: ! ( a -- b ) [ [ dup 1 ne ] ? [ dup 1 sub ! mul ] ]', | ||||
| ':: range ( n -- b ) [', | ||||
| '		-- initial state...', | ||||
| '		[ dup isNumber ] ? ', | ||||
| '			[ [] swap ]', | ||||
| '		-- get first elem...', | ||||
| '		else', | ||||
| '			[ 0 at ]', | ||||
| '		-- we got to the end...', | ||||
| '		[ dup 0 eq ] ? ', | ||||
| '			[ drop ]', | ||||
| '		-- dec push new and continue...', | ||||
| '		else', | ||||
| '			[ 1 sub 0 before range ] ]', | ||||
| '', | ||||
| '-- Create a block containg a range of n numbers form 0 and adding s to', | ||||
| '-- each next number...', | ||||
| ':: range2 ( n s -- b )', | ||||
| '		[ swap range swap [] swap push \\ * 0 before each ]', | ||||
| '		[ swap range swap [] swap push \\ * 0 before map ]', | ||||
| '', | ||||
| '-- Sum up the elements of a block...', | ||||
| ':: sum ( L -- s ) [', | ||||
| '	-- empty list, sum is 0...', | ||||
| '	[ len 0 eq ] ?', | ||||
| '		[ . 0 ]', | ||||
| '	else', | ||||
| '		-- sum of list of len 1 is it\'s content, so just pop it...', | ||||
| '		[ [ len 1 eq ] ?', | ||||
| '			[ pop swap . ]', | ||||
| '		-- and now recursively sum up elements till the list is 1 in length...', | ||||
| '		else', | ||||
| '			[ pop rot pop tor add push sum ] ] ]', | ||||
| '', | ||||
| ''].join('\n') | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user