# Factorial in Whitespace

Example for versions Whitespacers (Ruby)

This example uses a slightly different method of commenting — each command is preceded with its literal description. Numbers and labels are enclosed in brackets.

The example works as follows: heap is used to store variables (1 — index of the first factorial which doesn’t need to be calculated, 2..5 — ASCII-codes of special characters used in printing, 6 and 7 — current number and its factorial), and stack is used to run commands). Factorial is calculated iteratively, on each iteration previously calculated values are printed, and new ones are calculated and stored to memory. After this, the newly calculated number is compared with contents of cell 1: if it is less, the loop continues, otherwise it halts.

A curious thing to note is that in Whitespace numeric system zero is “negative”: a number must have at least one Tab in its notation, and binary notation of zero has no 1s, so it has to be written as Tab (only sign bit).

``````push_1  { 	}
push_17  { 	   	}
store		 push_2  { 	 }
push_33  { 	    	}
store		 push_3  { 		}
push_32  { 	     }
store		 push_4  { 	  }
push_61  { 				 	}
store		 push_5  { 	 	}
push_10  { 	 	 }
store		 push_6  { 		 }
push_0  {	 }
store		 push_7  { 			}
push_1  { 	}
store		 label
{ }
printing_block_push_6  { 		 }
retrieve			print_as_number
push_2  { 	 }
retrieve			print_as_char
push_3  { 		}
retrieve			print_as_char
push_4  { 	  }
retrieve			print_as_char
push_3  { 		}
retrieve			print_as_char
push_7  { 			}
retrieve			print_as_number
push_5  { 	 	}
retrieve			print_as_char
increase_counter_block_push_6  { 		 }
push_6  { 		 }
retrieve			push_1  { 	}
push_7  { 			}
retrieve			push_6  { 		 }
retrieve			multiply
store		 conditional_return_block_push_6  { 		 }
retrieve			push_1  { 	}
retrieve			subtract	  	jump_if_negative
{ }
quit

end
``````