DirectBrainFUCK is a brainfuck-like programming language, but you can directly move the pointer.
DirectBrainFUCK is derived from brainfuck; however, the number of cells has to be limited to 64, accessible by a one-based index.
Also, its nearly impossible to change the value of a cell that the memory pointer is pointing at, unless you use the input instruction to let the user press a key corresponding to an ASCII value.
The language lacks the control flow commands
], excluding it in particular from offering conditional and iterative facilities.
|Character||What it does|
||Moves the memory pointer one cell to the left.|
||Moves the memory pointer one cell to the right.|
||Moves the memory pointer to the cell with the one-based index |
||Prompts the user for an input character and stores its ASCII code in the current cell.|
||Prints the ASCII character associated with the value of the current cell.|
The following example provides a one-time cat program:
This cat program demonstrates the utilization of direct cell access using the dedicated
A very simple implementation in Common Lisp is provided:
(defun interpret-DirectBrainFUCK (code &aux (position 0)) (declare (type string code) (type fixnum position)) (symbol-macrolet ((token (the character (char code position)))) (let ((memory (make-array 64 :element-type 'integer :initial-element 0)) (pointer 0)) (declare (type (vector integer 64) memory) (type (integer 0 63) pointer)) (loop while (< position (length code)) do (case token (#\< (decf pointer)) (#\> (incf pointer)) (#\m (incf position) (setf pointer (loop with start of-type fixnum = position while (and (< position (length code)) (digit-char-p token)) do (incf position) finally (return (1- (parse-integer code :start start :end position))))) (decf position)) (#\, (format T "~&Please input a character: ") (setf (aref memory pointer) (char-code (read-char))) (clear-input)) (#\. (write-char (code-char (aref memory pointer)))) (T NIL)) (incf position)))))