VM::Dreamer::Util - Utilities for Deamer
These functions contain some of the core logic in Dreamer and help the higher level functions do their work.
Takes an array of single digits and turns it into a string;
my $string = stringify_array( [ 5, 3, 2, 1, 0, 8, 7, 5 ] ); # '53210875'
Take a string of single digits and turns each one into successive elements of an array. Returns a reference to said array.
my $aref = arrayify_string('53210875'); # [ 5, 3, 2, 1, 0, 7, 7, 5 ]
Takes a line of input from a program for your machine and returns the address in which to store the instruction and the instruction itself.
my ( $address, $instruction ) = parse_program_line("15\t342"); ( 15, 342 )
This function really just splits on the separator.
Splits an instruction into the op_code and the operand.
my $machine = { next_instruction => '1101011100111010', meta => { width => { op_code => 4, operand => 12, }, }, }; my( $op_code, $operand ) = parse_next_instruction($machine); # ( 1101, 11100111010 );
Takes two references to arrays whose elements are single digits and the greatest value for any of the digits and adds them together.
my $augend = [ 0, 5, 3, 2 ]; my $addend = [ 3, 9, 4, 8 ];
my $greatest_digit = 9;
my $sum = add_two_arrays( $augend, $addend, $greatest_digit ); # [ 4, 4, 8, 0 ]
Really, this is just adding 532 and 3948, but since the base is arbitrary, I found it easier to implement in this way.
The arrays are almost like old-fashioned adding machines where each element is a "wheel" of digits and the greatest_digit tells you when to carry.
my $minuend = [ 1, 0, 1, 1, 0, 0, 1, 0 ]; my $subtrahend = [ 1, 0, 0, 0, 1, 0, 1, 0 ];
my $greatest_digt = 1;
my $difference = subtract_two_arrays( $minuend, $subtrahend, $greatest_digit ); # [ 0, 0, 1, 0, 0, 1, 0, 0 ]
Similarly to carrying in addition, greatest_digit helps us when we need to borrow during subtraction.
William Stevenson <william at coders dot coop>
This software is Copyright (c) 2013 by William Stevenson.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)
To install VM::Dreamer, copy and paste the appropriate command in to your terminal.
cpanm
cpanm VM::Dreamer
CPAN shell
perl -MCPAN -e shell install VM::Dreamer
For more information on module installation, please visit the detailed CPAN module installation guide.