vector functions done, all documented

This commit is contained in:
Rowan Torbitzky-Lane 2025-02-10 23:17:59 -06:00
parent 3dce0daf4e
commit 7d6d8bf23d
7 changed files with 1107 additions and 266 deletions

View File

@ -2,7 +2,7 @@
## Push Language TODO ## Push Language TODO
- [ ] Make all vector functions applicable to string functions and vice versa - [X] Make all vector functions applicable to string functions and vice versa
- [X] Implement all functions as seen in propeller - [X] Implement all functions as seen in propeller
- [X] Implement all functions as seen in the specification - [X] Implement all functions as seen in the specification
- [ ] Implement Linear Algebra functions as specified in the previous papers - [ ] Implement Linear Algebra functions as specified in the previous papers
@ -10,7 +10,7 @@
- [X] Disambiguate isEmpty and stackIsEmpty - [X] Disambiguate isEmpty and stackIsEmpty
- [X] Rename Logical to Bool - [X] Rename Logical to Bool
- [X] Make int yank, shove, yankdup, and shovedup generic - [X] Make int yank, shove, yankdup, and shovedup generic
- [ ] Write haddock documentation for each function - [X] Write haddock documentation for each function
- [X] Refactor all functions to take state as the final parameter - [X] Refactor all functions to take state as the final parameter
- [X] Standardize the pattern matching parameter names, such as c1 : cs - [X] Standardize the pattern matching parameter names, such as c1 : cs
- [ ] Write unit/quickcheck tests for all of the instructions - [ ] Write unit/quickcheck tests for all of the instructions

View File

@ -3,113 +3,328 @@ module HushGP.Instructions.VectorCharInstructions where
import HushGP.State import HushGP.State
import HushGP.Instructions.GenericInstructions import HushGP.Instructions.GenericInstructions
instructionVectorCharConcat :: State -> State -- |Pops the top char vector from the char vector stack.
instructionVectorCharConcat = instructionVectorConcat vectorChar
instructionVectorCharConj :: State -> State
instructionVectorCharConj = instructionVectorConj char vectorChar
instructionVectorCharTakeN :: State -> State
instructionVectorCharTakeN = instructionVectorTakeN vectorChar
instructionVectorCharSubVector :: State -> State
instructionVectorCharSubVector = instructionSubVector vectorChar
instructionVectorCharFirst :: State -> State
instructionVectorCharFirst = instructionVectorFirst char vectorChar
instructionVectorCharLast :: State -> State
instructionVectorCharLast = instructionVectorLast char vectorChar
instructionVectorCharNth :: State -> State
instructionVectorCharNth = instructionVectorNth char vectorChar
instructionVectorCharRest :: State -> State
instructionVectorCharRest = instructionVectorRest vectorChar
instructionVectorCharButLast :: State -> State
instructionVectorCharButLast = instructionVectorButLast vectorChar
instructionVectorCharLength :: State -> State
instructionVectorCharLength = instructionLength vectorChar
instructionVectorCharReverse :: State -> State
instructionVectorCharReverse = instructionReverse vectorChar
instructionVectorCharPushAll :: State -> State
instructionVectorCharPushAll = instructionPushAll char vectorChar
instructionVectorCharMakeEmpty :: State -> State
instructionVectorCharMakeEmpty = instructionVectorMakeEmpty vectorChar
instructionVectorCharIsEmpty :: State -> State
instructionVectorCharIsEmpty = instructionVectorIsEmpty vectorChar
instructionVectorCharIndexOf :: State -> State
instructionVectorCharIndexOf = instructionVectorIndexOf char vectorChar
instructionVectorCharOccurrencesOf :: State -> State
instructionVectorCharOccurrencesOf = instructionVectorOccurrencesOf char vectorChar
instructionVectorCharSetNth :: State -> State
instructionVectorCharSetNth = instructionVectorSetNth char vectorChar
instructionVectorCharReplace :: State -> State
instructionVectorCharReplace = instructionVectorReplace char vectorChar Nothing
instructionVectorCharReplaceFirst :: State -> State
instructionVectorCharReplaceFirst = instructionVectorReplace char vectorChar (Just 1)
instructionVectorCharRemove :: State -> State
instructionVectorCharRemove = instructionVectorRemove char vectorChar Nothing
instructionVectorCharIterate :: State -> State
instructionVectorCharIterate = instructionVectorIterate char vectorChar GeneVectorChar instructionVectorCharIterate "instructionVectorCharIterate"
instructionVectorCharPop :: State -> State instructionVectorCharPop :: State -> State
instructionVectorCharPop = instructionPop vectorChar instructionVectorCharPop = instructionPop vectorChar
-- |Duplicates the top char vector from the char vector stack.
instructionVectorCharDup :: State -> State instructionVectorCharDup :: State -> State
instructionVectorCharDup = instructionDup vectorChar instructionVectorCharDup = instructionDup vectorChar
-- |Duplicates the top char vector from the char vector stack N times
-- based on the top int from the int stack.
instructionVectorCharDupN :: State -> State instructionVectorCharDupN :: State -> State
instructionVectorCharDupN = instructionDupN vectorChar instructionVectorCharDupN = instructionDupN vectorChar
-- |Swaps the top two char vectors from the char vector stack.
instructionVectorCharSwap :: State -> State instructionVectorCharSwap :: State -> State
instructionVectorCharSwap = instructionSwap vectorChar instructionVectorCharSwap = instructionSwap vectorChar
-- |Rotates the top three char vectors from the char vector stack.
instructionVectorCharRot :: State -> State instructionVectorCharRot :: State -> State
instructionVectorCharRot = instructionRot vectorChar instructionVectorCharRot = instructionRot vectorChar
-- |Sets the vector char stack to []
instructionVectorCharFlush :: State -> State instructionVectorCharFlush :: State -> State
instructionVectorCharFlush = instructionFlush vectorChar instructionVectorCharFlush = instructionFlush vectorChar
-- |Pushes True to the bool stack if the top two char vectors from
-- the vector char stack are equal. Pushes False otherwise.
instructionVectorCharEq :: State -> State instructionVectorCharEq :: State -> State
instructionVectorCharEq = instructionEq vectorChar instructionVectorCharEq = instructionEq vectorChar
-- |Calculates the size of the vector char stack and pushes that number
-- to the int stack.
instructionVectorCharStackDepth :: State -> State instructionVectorCharStackDepth :: State -> State
instructionVectorCharStackDepth = instructionStackDepth vectorChar instructionVectorCharStackDepth = instructionStackDepth vectorChar
-- |Moves an item from deep within the vector char stack to the top of the vector char stack based on
-- the top int from the int stack.
instructionVectorCharYank :: State -> State instructionVectorCharYank :: State -> State
instructionVectorCharYank = instructionYank vectorChar instructionVectorCharYank = instructionYank vectorChar
-- |Copies an item from deep within the vector char stack to the top of the vector char stack based on
-- the top int from the int stack.
instructionVectorCharYankDup :: State -> State instructionVectorCharYankDup :: State -> State
instructionVectorCharYankDup = instructionYankDup vectorChar instructionVectorCharYankDup = instructionYankDup vectorChar
-- |Pushes True to the bool stack if the vector char stack is empty. False if not.
instructionVectorCharIsStackEmpty :: State -> State instructionVectorCharIsStackEmpty :: State -> State
instructionVectorCharIsStackEmpty = instructionIsStackEmpty vectorChar instructionVectorCharIsStackEmpty = instructionIsStackEmpty vectorChar
-- |Moves an item from the top of the vector char stack to deep within the vector char stack based on
-- the top int from the int stack.
instructionVectorCharShove :: State -> State instructionVectorCharShove :: State -> State
instructionVectorCharShove = instructionShove vectorChar instructionVectorCharShove = instructionShove vectorChar
-- |Copies an item from the top of the vector char stack to deep within the vector char stack based on
-- the top int from the int stack.
instructionVectorCharShoveDup :: State -> State instructionVectorCharShoveDup :: State -> State
instructionVectorCharShoveDup = instructionShoveDup vectorChar instructionVectorCharShoveDup = instructionShoveDup vectorChar
-- |Duplicate the top N items from the vector char stack based on the top int from the int stack.
instructionVectorCharDupItems :: State -> State
instructionVectorCharDupItems = instructionDupItems vectorChar
-- |Concats the top two vectors on top of the vector char stack.
instructionVectorCharConcat :: State -> State
instructionVectorCharConcat = instructionVectorConcat vectorChar
-- |Takes the top char from the char stack and prepends it to top char vector
-- on the char vector stack.
instructionVectorCharConj :: State -> State
instructionVectorCharConj = instructionVectorConj char vectorChar
-- |Takes the top char from the char stack and appends it to top char vector
-- on the char vector stack.
instructionVectorCharConjEnd :: State -> State
instructionVectorCharConjEnd = instructionVectorConjEnd char vectorChar
-- |Takes the first N chars from the top of the char vector from the char vector
-- and pushes the result to the char vector stack. N is pulled from the top of
-- the int stack.
instructionVectorCharTakeN :: State -> State
instructionVectorCharTakeN = instructionVectorTakeN vectorChar
-- |Takes the last N chars from the top of the char vector from the char vector
-- and pushes the result to the char vector stack. N is pulled from the top of
-- the int stack.
instructionVectorCharTakeRN :: State -> State
instructionVectorCharTakeRN = instructionVectorTakeRN vectorChar
-- |Takes a sublist of the top char vector on top of the vector char stack.
-- The two ints to determine bounds are pulled from the top of the int stack.
instructionVectorCharSubVector :: State -> State
instructionVectorCharSubVector = instructionSubVector vectorChar
-- |Takes the first char from the top of the vector char stack and places
-- it on the char stack.
instructionVectorCharFirst :: State -> State
instructionVectorCharFirst = instructionVectorFirst char vectorChar
-- |Takes the first char from the top of the vector char stack and places
-- it wrapped in a list on top of the vector char stack.
instructionVectorCharFromFirstPrim :: State -> State
instructionVectorCharFromFirstPrim = instructionVectorFromFirstPrim vectorChar
-- |Takes the first char from the top of the char stack and places it
-- wrapped in a list on top of the vector char stack.
instructionVectorCharFromPrim :: State -> State
instructionVectorCharFromPrim = instructionVectorFromPrim char vectorChar
-- |Takes the last char from the top of the vector char stack and places
-- it on the char stack.
instructionVectorCharLast :: State -> State
instructionVectorCharLast = instructionVectorLast char vectorChar
-- |Takes the last char from the top char vector on the vector char stack and
-- places it on the char stack.
instructionVectorCharFromLastPrim :: State -> State
instructionVectorCharFromLastPrim = instructionVectorFromLastPrim vectorChar
-- |Takes the Nth char from the top char vector and places it onto the char stack
-- based on an int from the top of the int stack.
instructionVectorCharNth :: State -> State
instructionVectorCharNth = instructionVectorNth char vectorChar
-- |Takes the Nth char from the top char vector on the vector char stack and
-- creates a vector wrapping that Nth item, pushing it back onto the vector char stack.
-- N is the top item on the int stack.
instructionVectorCharFromNthPrim :: State -> State
instructionVectorCharFromNthPrim = instructionVectorFromNthPrim vectorChar
-- |Removes the first char from the top char vector on the vector char stack and
-- places the result back onto the vector char stack.
instructionVectorCharRest :: State -> State
instructionVectorCharRest = instructionVectorRest vectorChar
-- |Removes the last char from the top char vector on the vector char stack and
-- places the result back onto the vector char stack.
instructionVectorCharButLast :: State -> State
instructionVectorCharButLast = instructionVectorButLast vectorChar
-- |Drops the first N items from the top char vector and pushes the result
-- back to the vector char stack. N is pulled from the top of the int stack.
instructionVectorCharDrop :: State -> State
instructionVectorCharDrop = instructionVectorDrop vectorChar
-- |Drops the last N items from the top char vector and pushes the result
-- back to the vector char stack. N is pulled from the top of the int stack.
instructionVectorCharDropR :: State -> State
instructionVectorCharDropR = instructionVectorDropR vectorChar
-- |Pushes the length of the top char vector from the vector char stack
-- to the top of the int stack.
instructionVectorCharLength :: State -> State
instructionVectorCharLength = instructionLength vectorChar
-- |Reverses the top char vector from the vector char stack and pushes the
-- result to the vector char stack.
instructionVectorCharReverse :: State -> State
instructionVectorCharReverse = instructionReverse vectorChar
-- |Takes the top char vector from the vector char stack and pushes the
-- individual chars to the vector char stack.
instructionVectorCharPushAll :: State -> State
instructionVectorCharPushAll = instructionPushAll char vectorChar
-- |Makes an empty vector and pushes it to the vector char stack.
instructionVectorCharMakeEmpty :: State -> State
instructionVectorCharMakeEmpty = instructionVectorMakeEmpty vectorChar
-- |Checks if the top char vector from the vector char stack is empty.
-- Pushes True if the char vector is empty to the bool stack. False otherwise.
instructionVectorCharIsEmpty :: State -> State
instructionVectorCharIsEmpty = instructionVectorIsEmpty vectorChar
-- |If the top char vector from the vector char stack contains the top char from the char
-- stack, pushes True to the bool stack and pushes False otherwise.
instructionVectorCharContains :: State -> State
instructionVectorCharContains = instructionVectorContains char vectorChar
-- |If the second to top char vector can be found within the first char vector from the
-- vector char stack, pushes True to the bool stack if is found, else False.
instructionVectorCharContainsVectorChar :: State -> State
instructionVectorCharContainsVectorChar = instructionVectorContainsVector vectorChar
-- |Finds the first index of the top char in the char stack inside of the
-- top char vector from the vector char stack and pushes the result to the int stack.
instructionVectorCharIndexOf :: State -> State
instructionVectorCharIndexOf = instructionVectorIndexOf char vectorChar
-- |Searches and pushes the index of the second char vector inside of the first
-- char vector to the int stack from the vector char stack. Pushes -1 if not found.
instructionVectorCharIndexOfVectorChar :: State -> State
instructionVectorCharIndexOfVectorChar = instructionVectorIndexOfVector vectorChar
-- |Finds the amount of times the top char on the char stack occurs inside of
-- the top char vector from the vector char stack and pushes the result to the
-- int stack.
instructionVectorCharOccurrencesOf :: State -> State
instructionVectorCharOccurrencesOf = instructionVectorOccurrencesOf char vectorChar
-- |Counts the amount of occurrences of the second char vector within the first
-- char vector. Pushes the result to the int stack.
instructionVectorCharOccurrencesOfVectorChar :: State -> State
instructionVectorCharOccurrencesOfVectorChar = instructionVectorOccurrencesOfVector vectorChar
-- |Splits the top char vector from the vector char stack into lists of size one and pushes
-- the result back one the vector char stack.
instructionVectorCharParseToChar :: State -> State
instructionVectorCharParseToChar = instructionVectorParseToPrim vectorChar
-- |Sets the Nth index inside of the top char vector from the vector char stack to the
-- top value from the primitive stack. N is pulled from the top of the int stack.
instructionVectorCharSetNth :: State -> State
instructionVectorCharSetNth = instructionVectorSetNth char vectorChar
-- |Splits the char vector on top of the vector char stack with the char from the top
-- of the char stack and pushes the result to the original vector stack.
instructionVectorCharSplitOn :: State -> State
instructionVectorCharSplitOn = instructionVectorSplitOn char vectorChar
-- |Splits the first char vector based on the second char vector from the vector
-- char stack and pushes the result to the vector char stack.
instructionVectorCharSplitOnVectorChar :: State -> State
instructionVectorCharSplitOnVectorChar = instructionVectorSplitOnVector vectorChar
-- |Replaces the first occurrence of the top char with the second char from
-- the char stack inside of the top char vector from the vector char stack.
-- Pushes the modified char vector to the vector char stack.
instructionVectorCharReplaceFirst :: State -> State
instructionVectorCharReplaceFirst = instructionVectorReplace char vectorChar (Just 1)
-- |Replaces all occurrences of the top char with the second char from
-- the char stack inside of the top char vector from the vector char stack.
-- Pushes the modified char vector to the vector char stack.
instructionVectorCharReplaceAll :: State -> State
instructionVectorCharReplaceAll = instructionVectorReplace char vectorChar Nothing
-- |Replaces N occurrences of the top char with the second char from
-- the char stack inside of the top char vector from the vector char stack.
-- Pushes the modified char vector to the vector char stack. N is pulled from
-- the top of the int stack.
instructionVectorCharReplaceN :: State -> State
instructionVectorCharReplaceN = instructionVectorReplaceN char vectorChar
-- |Replaces the first occurrence of the second char vector with the third char vector
-- inside of the first char vector from the vector char stack. Pushes the result to the
-- vector char stack.
instructionVectorCharReplaceFirstVectorChar :: State -> State
instructionVectorCharReplaceFirstVectorChar = instructionVectorReplaceVector vectorChar (Just 1)
-- |Replaces all occurrences of the second char vector with the third char vector
-- inside of the first char vector from the vector char stack. Pushes the result to the
-- vector char stack.
instructionVectorCharReplaceAllVectorChar :: State -> State
instructionVectorCharReplaceAllVectorChar = instructionVectorReplaceVector vectorChar Nothing
-- |Replaces N occurrences of the second char vector with the third char vector
-- inside of the first char vector from the vector char stack. Pushes the result to the
-- vector char stack. N is pulled from the top of the int stack.
instructionVectorCharReplaceVectorCharN :: State -> State
instructionVectorCharReplaceVectorCharN = instructionVectorReplaceVectorN vectorChar
-- |Removes the first occurrence of the top char from
-- the char stack inside of the top char vector from the vector char stack.
-- Pushes the modified char vector to the vector char stack.
instructionVectorCharRemoveFirst :: State -> State
instructionVectorCharRemoveFirst = instructionVectorRemove char vectorChar (Just 1)
-- |Removes the all occurrences of the top char from
-- the char stack inside of the top char vector from the vector char stack.
-- Pushes the modified char vector to the vector char stack.
instructionVectorCharRemoveAll :: State -> State
instructionVectorCharRemoveAll = instructionVectorRemove char vectorChar Nothing
-- |Removes N occurrences of the top char from
-- the char stack inside of the top char vector from the vector char stack.
-- Pushes the modified char vector to the vector char stack. N is pulled
-- from the top of the int stack.
instructionVectorCharRemoveN :: State -> State
instructionVectorCharRemoveN = instructionVectorRemoveN char vectorChar
-- |Removes the first occurrence of the second char vector
-- inside of the first char vector from the vector char stack. Pushes the result to the
-- vector char stack.
instructionVectorCharRemoveFirstVectorChar :: State -> State
instructionVectorCharRemoveFirstVectorChar = instructionVectorRemoveVector vectorChar (Just 1)
-- |Removes all occurrences of the second char vector
-- inside of the first char vector from the vector char stack. Pushes the result to the
-- vector char stack.
instructionVectorCharRemoveAllVectorChar :: State -> State
instructionVectorCharRemoveAllVectorChar = instructionVectorRemoveVector vectorChar Nothing
-- |Removes N occurrences of the second char vector
-- inside of the first char vector from the vector char stack. Pushes the result to the
-- vector char stack. N is pulled from the top of the int stack.
instructionVectorCharRemoveNVectorChar :: State -> State
instructionVectorCharRemoveNVectorChar = instructionVectorRemoveVectorN vectorChar
-- |Iterates over the top char vector on the vector char stack, applying the top instruction of the
-- exec stack along the way.
instructionVectorCharIterate :: State -> State
instructionVectorCharIterate = instructionVectorIterate char vectorChar GeneVectorChar instructionVectorCharIterate "instructionVectorCharIterate"
-- |Sorts the top char vector on the vector char stack and pushes the result back to the
-- vector char stack.
instructionVectorCharSort :: State -> State instructionVectorCharSort :: State -> State
instructionVectorCharSort = instructionVectorSort vectorChar instructionVectorCharSort = instructionVectorSort vectorChar
-- |Sorts the top char vector on the vector char stack, reverses it, and pushes the result back to the
-- vector char stack.
instructionVectorCharSortReverse :: State -> State instructionVectorCharSortReverse :: State -> State
instructionVectorCharSortReverse = instructionVectorSortReverse vectorChar instructionVectorCharSortReverse = instructionVectorSortReverse vectorChar
instructionVectorCharDupItems :: State -> State -- |Inserts the top char from the char stack into the top char vector from the
instructionVectorCharDupItems = instructionDupItems vectorChar -- vector char stack at a specified index and pushes the result to the vector
-- char stack. The index is pulled from the top of the int stack.
instructionVectorCharInsert :: State -> State
instructionVectorCharInsert = instructionVectorInsert char vectorChar
-- |Inserts the second char vector into the first char vector from the vector char stack
-- at a specified index and pushes the result to the vector char stack. The index is
-- pulled from the top of the int stack.
instructionVectorCharInsertVectorChar :: State -> State
instructionVectorCharInsertVectorChar = instructionVectorInsertVector vectorChar

View File

@ -3,113 +3,328 @@ module HushGP.Instructions.VectorFloatInstructions where
import HushGP.State import HushGP.State
import HushGP.Instructions.GenericInstructions import HushGP.Instructions.GenericInstructions
instructionVectorFloatConcat :: State -> State -- |Pops the top float vector from the float vector stack.
instructionVectorFloatConcat = instructionVectorConcat vectorFloat
instructionVectorFloatConj :: State -> State
instructionVectorFloatConj = instructionVectorConj float vectorFloat
instructionVectorFloatTakeN :: State -> State
instructionVectorFloatTakeN = instructionVectorTakeN vectorFloat
instructionVectorFloatSubVector :: State -> State
instructionVectorFloatSubVector = instructionSubVector vectorFloat
instructionVectorFloatFirst :: State -> State
instructionVectorFloatFirst = instructionVectorFirst float vectorFloat
instructionVectorFloatLast :: State -> State
instructionVectorFloatLast = instructionVectorLast float vectorFloat
instructionVectorFloatNth :: State -> State
instructionVectorFloatNth = instructionVectorNth float vectorFloat
instructionVectorFloatRest :: State -> State
instructionVectorFloatRest = instructionVectorRest vectorFloat
instructionVectorFloatButLast :: State -> State
instructionVectorFloatButLast = instructionVectorButLast vectorFloat
instructionVectorFloatLength :: State -> State
instructionVectorFloatLength = instructionLength vectorFloat
instructionVectorFloatReverse :: State -> State
instructionVectorFloatReverse = instructionReverse vectorFloat
instructionVectorFloatPushAll :: State -> State
instructionVectorFloatPushAll = instructionPushAll float vectorFloat
instructionVectorFloatMakeEmpty :: State -> State
instructionVectorFloatMakeEmpty = instructionVectorMakeEmpty vectorFloat
instructionVectorFloatIsEmpty :: State -> State
instructionVectorFloatIsEmpty = instructionVectorIsEmpty vectorFloat
instructionVectorFloatIndexOf :: State -> State
instructionVectorFloatIndexOf = instructionVectorIndexOf float vectorFloat
instructionVectorFloatOccurrencesOf :: State -> State
instructionVectorFloatOccurrencesOf = instructionVectorOccurrencesOf float vectorFloat
instructionVectorFloatSetNth :: State -> State
instructionVectorFloatSetNth = instructionVectorSetNth float vectorFloat
instructionVectorFloatReplace :: State -> State
instructionVectorFloatReplace = instructionVectorReplace float vectorFloat Nothing
instructionVectorFloatReplaceFirst :: State -> State
instructionVectorFloatReplaceFirst = instructionVectorReplace float vectorFloat (Just 1)
instructionVectorFloatRemove :: State -> State
instructionVectorFloatRemove = instructionVectorRemove float vectorFloat Nothing
instructionVectorFloatIterate :: State -> State
instructionVectorFloatIterate = instructionVectorIterate float vectorFloat GeneVectorFloat instructionVectorFloatIterate "instructionVectorFloatIterate"
instructionVectorFloatPop :: State -> State instructionVectorFloatPop :: State -> State
instructionVectorFloatPop = instructionPop vectorFloat instructionVectorFloatPop = instructionPop vectorFloat
-- |Duplicates the top float vector from the float vector stack.
instructionVectorFloatDup :: State -> State instructionVectorFloatDup :: State -> State
instructionVectorFloatDup = instructionDup vectorFloat instructionVectorFloatDup = instructionDup vectorFloat
-- |Duplicates the top float vector from the float vector stack N times
-- based on the top int from the int stack.
instructionVectorFloatDupN :: State -> State instructionVectorFloatDupN :: State -> State
instructionVectorFloatDupN = instructionDupN vectorFloat instructionVectorFloatDupN = instructionDupN vectorFloat
-- |Swaps the top two float vectors from the float vector stack.
instructionVectorFloatSwap :: State -> State instructionVectorFloatSwap :: State -> State
instructionVectorFloatSwap = instructionSwap vectorFloat instructionVectorFloatSwap = instructionSwap vectorFloat
-- |Rotates the top three float vectors from the float vector stack.
instructionVectorFloatRot :: State -> State instructionVectorFloatRot :: State -> State
instructionVectorFloatRot = instructionRot vectorFloat instructionVectorFloatRot = instructionRot vectorFloat
-- |Sets the vector float stack to []
instructionVectorFloatFlush :: State -> State instructionVectorFloatFlush :: State -> State
instructionVectorFloatFlush = instructionFlush vectorFloat instructionVectorFloatFlush = instructionFlush vectorFloat
-- |Pushes True to the bool stack if the top two float vectors from
-- the vector float stack are equal. Pushes False otherwise.
instructionVectorFloatEq :: State -> State instructionVectorFloatEq :: State -> State
instructionVectorFloatEq = instructionEq vectorFloat instructionVectorFloatEq = instructionEq vectorFloat
-- |Calculates the size of the vector float stack and pushes that number
-- to the int stack.
instructionVectorFloatStackDepth :: State -> State instructionVectorFloatStackDepth :: State -> State
instructionVectorFloatStackDepth = instructionStackDepth vectorFloat instructionVectorFloatStackDepth = instructionStackDepth vectorFloat
-- |Moves an item from deep within the vector float stack to the top of the vector float stack based on
-- the top int from the int stack.
instructionVectorFloatYank :: State -> State instructionVectorFloatYank :: State -> State
instructionVectorFloatYank = instructionYank vectorFloat instructionVectorFloatYank = instructionYank vectorFloat
-- |Copies an item from deep within the vector float stack to the top of the vector float stack based on
-- the top int from the int stack.
instructionVectorFloatYankDup :: State -> State instructionVectorFloatYankDup :: State -> State
instructionVectorFloatYankDup = instructionYankDup vectorFloat instructionVectorFloatYankDup = instructionYankDup vectorFloat
-- |Pushes True to the bool stack if the vector float stack is empty. False if not.
instructionVectorFloatIsStackEmpty :: State -> State instructionVectorFloatIsStackEmpty :: State -> State
instructionVectorFloatIsStackEmpty = instructionIsStackEmpty vectorFloat instructionVectorFloatIsStackEmpty = instructionIsStackEmpty vectorFloat
-- |Moves an item from the top of the vector float stack to deep within the vector float stack based on
-- the top int from the int stack.
instructionVectorFloatShove :: State -> State instructionVectorFloatShove :: State -> State
instructionVectorFloatShove = instructionShove vectorFloat instructionVectorFloatShove = instructionShove vectorFloat
-- |Copies an item from the top of the vector float stack to deep within the vector float stack based on
-- the top int from the int stack.
instructionVectorFloatShoveDup :: State -> State instructionVectorFloatShoveDup :: State -> State
instructionVectorFloatShoveDup = instructionShoveDup vectorFloat instructionVectorFloatShoveDup = instructionShoveDup vectorFloat
-- |Duplicate the top N items from the vector float stack based on the top int from the int stack.
instructionVectorFloatDupItems :: State -> State
instructionVectorFloatDupItems = instructionDupItems vectorFloat
-- |Concats the top two vectors on top of the vector float stack.
instructionVectorFloatConcat :: State -> State
instructionVectorFloatConcat = instructionVectorConcat vectorFloat
-- |Takes the top float from the float stack and prepends it to top float vector
-- on the float vector stack.
instructionVectorFloatConj :: State -> State
instructionVectorFloatConj = instructionVectorConj float vectorFloat
-- |Takes the top float from the float stack and appends it to top float vector
-- on the float vector stack.
instructionVectorFloatConjEnd :: State -> State
instructionVectorFloatConjEnd = instructionVectorConjEnd float vectorFloat
-- |Takes the first N floats from the top of the float vector from the float vector
-- and pushes the result to the float vector stack. N is pulled from the top of
-- the int stack.
instructionVectorFloatTakeN :: State -> State
instructionVectorFloatTakeN = instructionVectorTakeN vectorFloat
-- |Takes the last N floats from the top of the float vector from the float vector
-- and pushes the result to the float vector stack. N is pulled from the top of
-- the int stack.
instructionVectorFloatTakeRN :: State -> State
instructionVectorFloatTakeRN = instructionVectorTakeRN vectorFloat
-- |Takes a sublist of the top float vector on top of the vector float stack.
-- The two ints to determine bounds are pulled from the top of the int stack.
instructionVectorFloatSubVector :: State -> State
instructionVectorFloatSubVector = instructionSubVector vectorFloat
-- |Takes the first float from the top of the vector float stack and places
-- it on the float stack.
instructionVectorFloatFirst :: State -> State
instructionVectorFloatFirst = instructionVectorFirst float vectorFloat
-- |Takes the first float from the top of the vector float stack and places
-- it wrapped in a list on top of the vector float stack.
instructionVectorFloatFromFirstPrim :: State -> State
instructionVectorFloatFromFirstPrim = instructionVectorFromFirstPrim vectorFloat
-- |Takes the first float from the top of the float stack and places it
-- wrapped in a list on top of the vector float stack.
instructionVectorFloatFromPrim :: State -> State
instructionVectorFloatFromPrim = instructionVectorFromPrim float vectorFloat
-- |Takes the last float from the top of the vector float stack and places
-- it on the float stack.
instructionVectorFloatLast :: State -> State
instructionVectorFloatLast = instructionVectorLast float vectorFloat
-- |Takes the last float from the top float vector on the vector float stack and
-- places it on the float stack.
instructionVectorFloatFromLastPrim :: State -> State
instructionVectorFloatFromLastPrim = instructionVectorFromLastPrim vectorFloat
-- |Takes the Nth float from the top float vector and places it onto the float stack
-- based on an int from the top of the int stack.
instructionVectorFloatNth :: State -> State
instructionVectorFloatNth = instructionVectorNth float vectorFloat
-- |Takes the Nth float from the top float vector on the vector float stack and
-- creates a vector wrapping that Nth item, pushing it back onto the vector float stack.
-- N is the top item on the int stack.
instructionVectorFloatFromNthPrim :: State -> State
instructionVectorFloatFromNthPrim = instructionVectorFromNthPrim vectorFloat
-- |Removes the first float from the top float vector on the vector float stack and
-- places the result back onto the vector float stack.
instructionVectorFloatRest :: State -> State
instructionVectorFloatRest = instructionVectorRest vectorFloat
-- |Removes the last float from the top float vector on the vector float stack and
-- places the result back onto the vector float stack.
instructionVectorFloatButLast :: State -> State
instructionVectorFloatButLast = instructionVectorButLast vectorFloat
-- |Drops the first N items from the top float vector and pushes the result
-- back to the vector float stack. N is pulled from the top of the int stack.
instructionVectorFloatDrop :: State -> State
instructionVectorFloatDrop = instructionVectorDrop vectorFloat
-- |Drops the last N items from the top float vector and pushes the result
-- back to the vector float stack. N is pulled from the top of the int stack.
instructionVectorFloatDropR :: State -> State
instructionVectorFloatDropR = instructionVectorDropR vectorFloat
-- |Pushes the length of the top float vector from the vector float stack
-- to the top of the int stack.
instructionVectorFloatLength :: State -> State
instructionVectorFloatLength = instructionLength vectorFloat
-- |Reverses the top float vector from the vector float stack and pushes the
-- result to the vector float stack.
instructionVectorFloatReverse :: State -> State
instructionVectorFloatReverse = instructionReverse vectorFloat
-- |Takes the top float vector from the vector float stack and pushes the
-- individual floats to the vector float stack.
instructionVectorFloatPushAll :: State -> State
instructionVectorFloatPushAll = instructionPushAll float vectorFloat
-- |Makes an empty vector and pushes it to the vector float stack.
instructionVectorFloatMakeEmpty :: State -> State
instructionVectorFloatMakeEmpty = instructionVectorMakeEmpty vectorFloat
-- |Checks if the top float vector from the vector float stack is empty.
-- Pushes True if the float vector is empty to the bool stack. False otherwise.
instructionVectorFloatIsEmpty :: State -> State
instructionVectorFloatIsEmpty = instructionVectorIsEmpty vectorFloat
-- |If the top float vector from the vector float stack contains the top float from the float
-- stack, pushes True to the bool stack and pushes False otherwise.
instructionVectorFloatContains :: State -> State
instructionVectorFloatContains = instructionVectorContains float vectorFloat
-- |If the second to top float vector can be found within the first float vector from the
-- vector float stack, pushes True to the bool stack if is found, else False.
instructionVectorFloatContainsVectorFloat :: State -> State
instructionVectorFloatContainsVectorFloat = instructionVectorContainsVector vectorFloat
-- |Finds the first index of the top float in the float stack inside of the
-- top float vector from the vector float stack and pushes the result to the int stack.
instructionVectorFloatIndexOf :: State -> State
instructionVectorFloatIndexOf = instructionVectorIndexOf float vectorFloat
-- |Searches and pushes the index of the second float vector inside of the first
-- float vector to the int stack from the vector float stack. Pushes -1 if not found.
instructionVectorFloatIndexOfVectorFloat :: State -> State
instructionVectorFloatIndexOfVectorFloat = instructionVectorIndexOfVector vectorFloat
-- |Finds the amount of times the top float on the float stack occurs inside of
-- the top float vector from the vector float stack and pushes the result to the
-- int stack.
instructionVectorFloatOccurrencesOf :: State -> State
instructionVectorFloatOccurrencesOf = instructionVectorOccurrencesOf float vectorFloat
-- |Counts the amount of occurrences of the second float vector within the first
-- float vector. Pushes the result to the int stack.
instructionVectorFloatOccurrencesOfVectorFloat :: State -> State
instructionVectorFloatOccurrencesOfVectorFloat = instructionVectorOccurrencesOfVector vectorFloat
-- |Splits the top float vector from the vector float stack into lists of size one and pushes
-- the result back one the vector float stack.
instructionVectorFloatParseToFloat :: State -> State
instructionVectorFloatParseToFloat = instructionVectorParseToPrim vectorFloat
-- |Sets the Nth index inside of the top float vector from the vector float stack to the
-- top value from the primitive stack. N is pulled from the top of the int stack.
instructionVectorFloatSetNth :: State -> State
instructionVectorFloatSetNth = instructionVectorSetNth float vectorFloat
-- |Splits the float vector on top of the vector float stack with the float from the top
-- of the float stack and pushes the result to the original vector stack.
instructionVectorFloatSplitOn :: State -> State
instructionVectorFloatSplitOn = instructionVectorSplitOn float vectorFloat
-- |Splits the first float vector based on the second float vector from the vector
-- float stack and pushes the result to the vector float stack.
instructionVectorFloatSplitOnVectorFloat :: State -> State
instructionVectorFloatSplitOnVectorFloat = instructionVectorSplitOnVector vectorFloat
-- |Replaces the first occurrence of the top float with the second float from
-- the float stack inside of the top float vector from the vector float stack.
-- Pushes the modified float vector to the vector float stack.
instructionVectorFloatReplaceFirst :: State -> State
instructionVectorFloatReplaceFirst = instructionVectorReplace float vectorFloat (Just 1)
-- |Replaces all occurrences of the top float with the second float from
-- the float stack inside of the top float vector from the vector float stack.
-- Pushes the modified float vector to the vector float stack.
instructionVectorFloatReplaceAll :: State -> State
instructionVectorFloatReplaceAll = instructionVectorReplace float vectorFloat Nothing
-- |Replaces N occurrences of the top float with the second float from
-- the float stack inside of the top float vector from the vector float stack.
-- Pushes the modified float vector to the vector float stack. N is pulled from
-- the top of the int stack.
instructionVectorFloatReplaceN :: State -> State
instructionVectorFloatReplaceN = instructionVectorReplaceN float vectorFloat
-- |Replaces the first occurrence of the second float vector with the third float vector
-- inside of the first float vector from the vector float stack. Pushes the result to the
-- vector float stack.
instructionVectorFloatReplaceFirstVectorFloat :: State -> State
instructionVectorFloatReplaceFirstVectorFloat = instructionVectorReplaceVector vectorFloat (Just 1)
-- |Replaces all occurrences of the second float vector with the third float vector
-- inside of the first float vector from the vector float stack. Pushes the result to the
-- vector float stack.
instructionVectorFloatReplaceAllVectorFloat :: State -> State
instructionVectorFloatReplaceAllVectorFloat = instructionVectorReplaceVector vectorFloat Nothing
-- |Replaces N occurrences of the second float vector with the third float vector
-- inside of the first float vector from the vector float stack. Pushes the result to the
-- vector float stack. N is pulled from the top of the int stack.
instructionVectorFloatReplaceVectorFloatN :: State -> State
instructionVectorFloatReplaceVectorFloatN = instructionVectorReplaceVectorN vectorFloat
-- |Removes the first occurrence of the top float from
-- the float stack inside of the top float vector from the vector float stack.
-- Pushes the modified float vector to the vector float stack.
instructionVectorFloatRemoveFirst :: State -> State
instructionVectorFloatRemoveFirst = instructionVectorRemove float vectorFloat (Just 1)
-- |Removes the all occurrences of the top float from
-- the float stack inside of the top float vector from the vector float stack.
-- Pushes the modified float vector to the vector float stack.
instructionVectorFloatRemoveAll :: State -> State
instructionVectorFloatRemoveAll = instructionVectorRemove float vectorFloat Nothing
-- |Removes N occurrences of the top float from
-- the float stack inside of the top float vector from the vector float stack.
-- Pushes the modified float vector to the vector float stack. N is pulled
-- from the top of the int stack.
instructionVectorFloatRemoveN :: State -> State
instructionVectorFloatRemoveN = instructionVectorRemoveN float vectorFloat
-- |Removes the first occurrence of the second float vector
-- inside of the first float vector from the vector float stack. Pushes the result to the
-- vector float stack.
instructionVectorFloatRemoveFirstVectorFloat :: State -> State
instructionVectorFloatRemoveFirstVectorFloat = instructionVectorRemoveVector vectorFloat (Just 1)
-- |Removes all occurrences of the second float vector
-- inside of the first float vector from the vector float stack. Pushes the result to the
-- vector float stack.
instructionVectorFloatRemoveAllVectorFloat :: State -> State
instructionVectorFloatRemoveAllVectorFloat = instructionVectorRemoveVector vectorFloat Nothing
-- |Removes N occurrences of the second float vector
-- inside of the first float vector from the vector float stack. Pushes the result to the
-- vector float stack. N is pulled from the top of the int stack.
instructionVectorFloatRemoveNVectorFloat :: State -> State
instructionVectorFloatRemoveNVectorFloat = instructionVectorRemoveVectorN vectorFloat
-- |Iterates over the top float vector on the vector float stack, applying the top instruction of the
-- exec stack along the way.
instructionVectorFloatIterate :: State -> State
instructionVectorFloatIterate = instructionVectorIterate float vectorFloat GeneVectorFloat instructionVectorFloatIterate "instructionVectorFloatIterate"
-- |Sorts the top float vector on the vector float stack and pushes the result back to the
-- vector float stack.
instructionVectorFloatSort :: State -> State instructionVectorFloatSort :: State -> State
instructionVectorFloatSort = instructionVectorSort vectorFloat instructionVectorFloatSort = instructionVectorSort vectorFloat
-- |Sorts the top float vector on the vector float stack, reverses it, and pushes the result back to the
-- vector float stack.
instructionVectorFloatSortReverse :: State -> State instructionVectorFloatSortReverse :: State -> State
instructionVectorFloatSortReverse = instructionVectorSortReverse vectorFloat instructionVectorFloatSortReverse = instructionVectorSortReverse vectorFloat
instructionVectorFloatDupItems :: State -> State -- |Inserts the top float from the float stack into the top float vector from the
instructionVectorFloatDupItems = instructionDupItems vectorFloat -- vector float stack at a specified index and pushes the result to the vector
-- float stack. The index is pulled from the top of the int stack.
instructionVectorFloatInsert :: State -> State
instructionVectorFloatInsert = instructionVectorInsert float vectorFloat
-- |Inserts the second float vector into the first float vector from the vector float stack
-- at a specified index and pushes the result to the vector float stack. The index is
-- pulled from the top of the int stack.
instructionVectorFloatInsertVectorFloat :: State -> State
instructionVectorFloatInsertVectorFloat = instructionVectorInsertVector vectorFloat

View File

@ -3,113 +3,328 @@ module HushGP.Instructions.VectorIntInstructions where
import HushGP.Instructions.GenericInstructions import HushGP.Instructions.GenericInstructions
import HushGP.State import HushGP.State
-- |Pops the top int vector from the int vector stack.
instructionVectorIntPop :: State -> State
instructionVectorIntPop = instructionPop vectorInt
-- |Duplicates the top int vector from the int vector stack.
instructionVectorIntDup :: State -> State
instructionVectorIntDup = instructionDup vectorInt
-- |Duplicates the top int vector from the int vector stack N times
-- based on the top int from the int stack.
instructionVectorIntDupN :: State -> State
instructionVectorIntDupN = instructionDupN vectorInt
-- |Swaps the top two int vectors from the int vector stack.
instructionVectorIntSwap :: State -> State
instructionVectorIntSwap = instructionSwap vectorInt
-- |Rotates the top three int vectors from the int vector stack.
instructionVectorIntRot :: State -> State
instructionVectorIntRot = instructionRot vectorInt
-- |Sets the vector int stack to []
instructionVectorIntFlush :: State -> State
instructionVectorIntFlush = instructionFlush vectorInt
-- |Pushes True to the bool stack if the top two int vectors from
-- the vector int stack are equal. Pushes False otherwise.
instructionVectorIntEq :: State -> State
instructionVectorIntEq = instructionEq vectorInt
-- |Calculates the size of the vector int stack and pushes that number
-- to the int stack.
instructionVectorIntStackDepth :: State -> State
instructionVectorIntStackDepth = instructionStackDepth vectorInt
-- |Moves an item from deep within the vector int stack to the top of the vector int stack based on
-- the top int from the int stack.
instructionVectorIntYank :: State -> State
instructionVectorIntYank = instructionYank vectorInt
-- |Copies an item from deep within the vector int stack to the top of the vector int stack based on
-- the top int from the int stack.
instructionVectorIntYankDup :: State -> State
instructionVectorIntYankDup = instructionYankDup vectorInt
-- |Pushes True to the bool stack if the vector int stack is empty. False if not.
instructionVectorIntIsStackEmpty :: State -> State
instructionVectorIntIsStackEmpty = instructionIsStackEmpty vectorInt
-- |Moves an item from the top of the vector int stack to deep within the vector int stack based on
-- the top int from the int stack.
instructionVectorIntShove :: State -> State
instructionVectorIntShove = instructionShove vectorInt
-- |Copies an item from the top of the vector int stack to deep within the vector int stack based on
-- the top int from the int stack.
instructionVectorIntShoveDup :: State -> State
instructionVectorIntShoveDup = instructionShoveDup vectorInt
-- |Duplicate the top N items from the vector int stack based on the top int from the int stack.
instructionVectorIntDupItems :: State -> State
instructionVectorIntDupItems = instructionDupItems vectorInt
-- |Concats the top two vectors on top of the vector int stack.
instructionVectorIntConcat :: State -> State instructionVectorIntConcat :: State -> State
instructionVectorIntConcat = instructionVectorConcat vectorInt instructionVectorIntConcat = instructionVectorConcat vectorInt
-- |Takes the top int from the int stack and prepends it to top int vector
-- on the int vector stack.
instructionVectorIntConj :: State -> State instructionVectorIntConj :: State -> State
instructionVectorIntConj = instructionVectorConj int vectorInt instructionVectorIntConj = instructionVectorConj int vectorInt
-- |Takes the top int from the int stack and appends it to top int vector
-- on the int vector stack.
instructionVectorIntConjEnd :: State -> State
instructionVectorIntConjEnd = instructionVectorConjEnd int vectorInt
-- |Takes the first N ints from the top of the int vector from the int vector
-- and pushes the result to the int vector stack. N is pulled from the top of
-- the int stack.
instructionVectorIntTakeN :: State -> State instructionVectorIntTakeN :: State -> State
instructionVectorIntTakeN = instructionVectorTakeN vectorInt instructionVectorIntTakeN = instructionVectorTakeN vectorInt
-- |Takes the last N ints from the top of the int vector from the int vector
-- and pushes the result to the int vector stack. N is pulled from the top of
-- the int stack.
instructionVectorIntTakeRN :: State -> State
instructionVectorIntTakeRN = instructionVectorTakeRN vectorInt
-- |Takes a sublist of the top int vector on top of the vector int stack.
-- The two ints to determine bounds are pulled from the top of the int stack.
instructionVectorIntSubVector :: State -> State instructionVectorIntSubVector :: State -> State
instructionVectorIntSubVector = instructionSubVector vectorInt instructionVectorIntSubVector = instructionSubVector vectorInt
-- |Takes the first int from the top of the vector int stack and places
-- it on the int stack.
instructionVectorIntFirst :: State -> State instructionVectorIntFirst :: State -> State
instructionVectorIntFirst = instructionVectorFirst int vectorInt instructionVectorIntFirst = instructionVectorFirst int vectorInt
-- |Takes the first int from the top of the vector int stack and places
-- it wrapped in a list on top of the vector int stack.
instructionVectorIntFromFirstPrim :: State -> State
instructionVectorIntFromFirstPrim = instructionVectorFromFirstPrim vectorInt
-- |Takes the first int from the top of the int stack and places it
-- wrapped in a list on top of the vector int stack.
instructionVectorIntFromPrim :: State -> State
instructionVectorIntFromPrim = instructionVectorFromPrim int vectorInt
-- |Takes the last int from the top of the vector int stack and places
-- it on the int stack.
instructionVectorIntLast :: State -> State instructionVectorIntLast :: State -> State
instructionVectorIntLast = instructionVectorLast int vectorInt instructionVectorIntLast = instructionVectorLast int vectorInt
-- |Takes the last int from the top int vector on the vector int stack and
-- places it on the int stack.
instructionVectorIntFromLastPrim :: State -> State
instructionVectorIntFromLastPrim = instructionVectorFromLastPrim vectorInt
-- |Takes the Nth int from the top int vector and places it onto the int stack
-- based on an int from the top of the int stack.
instructionVectorIntNth :: State -> State instructionVectorIntNth :: State -> State
instructionVectorIntNth = instructionVectorNth int vectorInt instructionVectorIntNth = instructionVectorNth int vectorInt
-- |Takes the Nth int from the top int vector on the vector int stack and
-- creates a vector wrapping that Nth item, pushing it back onto the vector int stack.
-- N is the top item on the int stack.
instructionVectorIntFromNthPrim :: State -> State
instructionVectorIntFromNthPrim = instructionVectorFromNthPrim vectorInt
-- |Removes the first int from the top int vector on the vector int stack and
-- places the result back onto the vector int stack.
instructionVectorIntRest :: State -> State instructionVectorIntRest :: State -> State
instructionVectorIntRest = instructionVectorRest vectorInt instructionVectorIntRest = instructionVectorRest vectorInt
-- |Removes the last int from the top int vector on the vector int stack and
-- places the result back onto the vector int stack.
instructionVectorIntButLast :: State -> State instructionVectorIntButLast :: State -> State
instructionVectorIntButLast = instructionVectorButLast vectorInt instructionVectorIntButLast = instructionVectorButLast vectorInt
-- |Drops the first N items from the top int vector and pushes the result
-- back to the vector int stack. N is pulled from the top of the int stack.
instructionVectorIntDrop :: State -> State
instructionVectorIntDrop = instructionVectorDrop vectorInt
-- |Drops the last N items from the top int vector and pushes the result
-- back to the vector int stack. N is pulled from the top of the int stack.
instructionVectorIntDropR :: State -> State
instructionVectorIntDropR = instructionVectorDropR vectorInt
-- |Pushes the length of the top int vector from the vector int stack
-- to the top of the int stack.
instructionVectorIntLength :: State -> State instructionVectorIntLength :: State -> State
instructionVectorIntLength = instructionLength vectorInt instructionVectorIntLength = instructionLength vectorInt
-- |Reverses the top int vector from the vector int stack and pushes the
-- result to the vector int stack.
instructionVectorIntReverse :: State -> State instructionVectorIntReverse :: State -> State
instructionVectorIntReverse = instructionReverse vectorInt instructionVectorIntReverse = instructionReverse vectorInt
-- |Takes the top int vector from the vector int stack and pushes the
-- individual ints to the vector int stack.
instructionVectorIntPushAll :: State -> State instructionVectorIntPushAll :: State -> State
instructionVectorIntPushAll = instructionPushAll int vectorInt instructionVectorIntPushAll = instructionPushAll int vectorInt
-- |Makes an empty vector and pushes it to the vector int stack.
instructionVectorIntMakeEmpty :: State -> State instructionVectorIntMakeEmpty :: State -> State
instructionVectorIntMakeEmpty = instructionVectorMakeEmpty vectorInt instructionVectorIntMakeEmpty = instructionVectorMakeEmpty vectorInt
-- |Checks if the top int vector from the vector int stack is empty.
-- Pushes True if the int vector is empty to the bool stack. False otherwise.
instructionVectorIntIsEmpty :: State -> State instructionVectorIntIsEmpty :: State -> State
instructionVectorIntIsEmpty = instructionVectorIsEmpty vectorInt instructionVectorIntIsEmpty = instructionVectorIsEmpty vectorInt
-- |If the top int vector from the vector int stack contains the top int from the int
-- stack, pushes True to the bool stack and pushes False otherwise.
instructionVectorIntContains :: State -> State
instructionVectorIntContains = instructionVectorContains int vectorInt
-- |If the second to top int vector can be found within the first int vector from the
-- vector int stack, pushes True to the bool stack if is found, else False.
instructionVectorIntContainsVectorInt :: State -> State
instructionVectorIntContainsVectorInt = instructionVectorContainsVector vectorInt
-- |Finds the first index of the top int in the int stack inside of the
-- top int vector from the vector int stack and pushes the result to the int stack.
instructionVectorIntIndexOf :: State -> State instructionVectorIntIndexOf :: State -> State
instructionVectorIntIndexOf = instructionVectorIndexOf int vectorInt instructionVectorIntIndexOf = instructionVectorIndexOf int vectorInt
-- |Searches and pushes the index of the second int vector inside of the first
-- int vector to the int stack from the vector int stack. Pushes -1 if not found.
instructionVectorIntIndexOfVectorInt :: State -> State
instructionVectorIntIndexOfVectorInt = instructionVectorIndexOfVector vectorInt
-- |Finds the amount of times the top int on the int stack occurs inside of
-- the top int vector from the vector int stack and pushes the result to the
-- int stack.
instructionVectorIntOccurrencesOf :: State -> State instructionVectorIntOccurrencesOf :: State -> State
instructionVectorIntOccurrencesOf = instructionVectorOccurrencesOf int vectorInt instructionVectorIntOccurrencesOf = instructionVectorOccurrencesOf int vectorInt
-- |Counts the amount of occurrences of the second int vector within the first
-- int vector. Pushes the result to the int stack.
instructionVectorIntOccurrencesOfVectorInt :: State -> State
instructionVectorIntOccurrencesOfVectorInt = instructionVectorOccurrencesOfVector vectorInt
-- |Splits the top int vector from the vector int stack into lists of size one and pushes
-- the result back one the vector int stack.
instructionVectorIntParseToInt :: State -> State
instructionVectorIntParseToInt = instructionVectorParseToPrim vectorInt
-- |Sets the Nth index inside of the top int vector from the vector int stack to the
-- top value from the primitive stack. N is pulled from the top of the int stack.
instructionVectorIntSetNth :: State -> State instructionVectorIntSetNth :: State -> State
instructionVectorIntSetNth = instructionVectorSetNth int vectorInt instructionVectorIntSetNth = instructionVectorSetNth int vectorInt
instructionVectorIntReplace :: State -> State -- |Splits the int vector on top of the vector int stack with the int from the top
instructionVectorIntReplace = instructionVectorReplace int vectorInt Nothing -- of the int stack and pushes the result to the original vector stack.
instructionVectorIntSplitOn :: State -> State
instructionVectorIntSplitOn = instructionVectorSplitOn int vectorInt
-- |Splits the first int vector based on the second int vector from the vector
-- int stack and pushes the result to the vector int stack.
instructionVectorIntSplitOnVectorInt :: State -> State
instructionVectorIntSplitOnVectorInt = instructionVectorSplitOnVector vectorInt
-- |Replaces the first occurrence of the top int with the second int from
-- the int stack inside of the top int vector from the vector int stack.
-- Pushes the modified int vector to the vector int stack.
instructionVectorIntReplaceFirst :: State -> State instructionVectorIntReplaceFirst :: State -> State
instructionVectorIntReplaceFirst = instructionVectorReplace int vectorInt (Just 1) instructionVectorIntReplaceFirst = instructionVectorReplace int vectorInt (Just 1)
instructionVectorIntRemove :: State -> State -- |Replaces all occurrences of the top int with the second int from
instructionVectorIntRemove = instructionVectorRemove int vectorInt Nothing -- the int stack inside of the top int vector from the vector int stack.
-- Pushes the modified int vector to the vector int stack.
instructionVectorIntReplaceAll :: State -> State
instructionVectorIntReplaceAll = instructionVectorReplace int vectorInt Nothing
-- |Replaces N occurrences of the top int with the second int from
-- the int stack inside of the top int vector from the vector int stack.
-- Pushes the modified int vector to the vector int stack. N is pulled from
-- the top of the int stack.
instructionVectorIntReplaceN :: State -> State
instructionVectorIntReplaceN = instructionVectorReplaceN int vectorInt
-- |Replaces the first occurrence of the second int vector with the third int vector
-- inside of the first int vector from the vector int stack. Pushes the result to the
-- vector int stack.
instructionVectorIntReplaceFirstVectorInt :: State -> State
instructionVectorIntReplaceFirstVectorInt = instructionVectorReplaceVector vectorInt (Just 1)
-- |Replaces all occurrences of the second int vector with the third int vector
-- inside of the first int vector from the vector int stack. Pushes the result to the
-- vector int stack.
instructionVectorIntReplaceAllVectorInt :: State -> State
instructionVectorIntReplaceAllVectorInt = instructionVectorReplaceVector vectorInt Nothing
-- |Replaces N occurrences of the second int vector with the third int vector
-- inside of the first int vector from the vector int stack. Pushes the result to the
-- vector int stack. N is pulled from the top of the int stack.
instructionVectorIntReplaceVectorIntN :: State -> State
instructionVectorIntReplaceVectorIntN = instructionVectorReplaceVectorN vectorInt
-- |Removes the first occurrence of the top int from
-- the int stack inside of the top int vector from the vector int stack.
-- Pushes the modified int vector to the vector int stack.
instructionVectorIntRemoveFirst :: State -> State
instructionVectorIntRemoveFirst = instructionVectorRemove int vectorInt (Just 1)
-- |Removes the all occurrences of the top int from
-- the int stack inside of the top int vector from the vector int stack.
-- Pushes the modified int vector to the vector int stack.
instructionVectorIntRemoveAll :: State -> State
instructionVectorIntRemoveAll = instructionVectorRemove int vectorInt Nothing
-- |Removes N occurrences of the top int from
-- the int stack inside of the top int vector from the vector int stack.
-- Pushes the modified int vector to the vector int stack. N is pulled
-- from the top of the int stack.
instructionVectorIntRemoveN :: State -> State
instructionVectorIntRemoveN = instructionVectorRemoveN int vectorInt
-- |Removes the first occurrence of the second int vector
-- inside of the first int vector from the vector int stack. Pushes the result to the
-- vector int stack.
instructionVectorIntRemoveFirstVectorInt :: State -> State
instructionVectorIntRemoveFirstVectorInt = instructionVectorRemoveVector vectorInt (Just 1)
-- |Removes all occurrences of the second int vector
-- inside of the first int vector from the vector int stack. Pushes the result to the
-- vector int stack.
instructionVectorIntRemoveAllVectorInt :: State -> State
instructionVectorIntRemoveAllVectorInt = instructionVectorRemoveVector vectorInt Nothing
-- |Removes N occurrences of the second int vector
-- inside of the first int vector from the vector int stack. Pushes the result to the
-- vector int stack. N is pulled from the top of the int stack.
instructionVectorIntRemoveNVectorInt :: State -> State
instructionVectorIntRemoveNVectorInt = instructionVectorRemoveVectorN vectorInt
-- |Iterates over the top int vector on the vector int stack, applying the top instruction of the
-- exec stack along the way.
instructionVectorIntIterate :: State -> State instructionVectorIntIterate :: State -> State
instructionVectorIntIterate = instructionVectorIterate int vectorInt GeneVectorInt instructionVectorIntIterate "instructionVectorIntIterate" instructionVectorIntIterate = instructionVectorIterate int vectorInt GeneVectorInt instructionVectorIntIterate "instructionVectorIntIterate"
instructionVectorIntPop :: State -> State -- |Sorts the top int vector on the vector int stack and pushes the result back to the
instructionVectorIntPop = instructionPop vectorChar -- vector int stack.
instructionVectorIntDup :: State -> State
instructionVectorIntDup = instructionDup vectorChar
instructionVectorIntDupN :: State -> State
instructionVectorIntDupN = instructionDupN vectorChar
instructionVectorIntSwap :: State -> State
instructionVectorIntSwap = instructionSwap vectorChar
instructionVectorIntRot :: State -> State
instructionVectorIntRot = instructionRot vectorChar
instructionVectorIntFlush :: State -> State
instructionVectorIntFlush = instructionFlush vectorChar
instructionVectorIntEq :: State -> State
instructionVectorIntEq = instructionEq vectorChar
instructionVectorIntStackDepth :: State -> State
instructionVectorIntStackDepth = instructionStackDepth vectorChar
instructionVectorIntYank :: State -> State
instructionVectorIntYank = instructionYank vectorChar
instructionVectorIntYankDup :: State -> State
instructionVectorIntYankDup = instructionYankDup vectorChar
instructionVectorIntIsStackEmpty :: State -> State
instructionVectorIntIsStackEmpty = instructionIsStackEmpty vectorChar
instructionVectorIntShove :: State -> State
instructionVectorIntShove = instructionShove vectorChar
instructionVectorIntShoveDup :: State -> State
instructionVectorIntShoveDup = instructionShoveDup vectorChar
instructionVectorIntSort :: State -> State instructionVectorIntSort :: State -> State
instructionVectorIntSort = instructionVectorSort vectorInt instructionVectorIntSort = instructionVectorSort vectorInt
-- |Sorts the top int vector on the vector int stack, reverses it, and pushes the result back to the
-- vector int stack.
instructionVectorIntSortReverse :: State -> State instructionVectorIntSortReverse :: State -> State
instructionVectorIntSortReverse = instructionVectorSortReverse vectorInt instructionVectorIntSortReverse = instructionVectorSortReverse vectorInt
instructionVectorIntDupItems :: State -> State -- |Inserts the top int from the int stack into the top int vector from the
instructionVectorIntDupItems = instructionDupItems vectorInt -- vector int stack at a specified index and pushes the result to the vector
-- int stack. The index is pulled from the top of the int stack.
instructionVectorIntInsert :: State -> State
instructionVectorIntInsert = instructionVectorInsert int vectorInt
-- |Inserts the second int vector into the first int vector from the vector int stack
-- at a specified index and pushes the result to the vector int stack. The index is
-- pulled from the top of the int stack.
instructionVectorIntInsertVectorInt :: State -> State
instructionVectorIntInsertVectorInt = instructionVectorInsertVector vectorInt

View File

@ -3,113 +3,328 @@ module HushGP.Instructions.VectorStringInstructions where
import HushGP.State import HushGP.State
import HushGP.Instructions.GenericInstructions import HushGP.Instructions.GenericInstructions
instructionVectorStringConcat :: State -> State -- |Pops the top string vector from the string vector stack.
instructionVectorStringConcat = instructionVectorConcat vectorString
instructionVectorStringConj :: State -> State
instructionVectorStringConj = instructionVectorConj string vectorString
instructionVectorStringTakeN :: State -> State
instructionVectorStringTakeN = instructionVectorTakeN vectorString
instructionVectorStringSubVector :: State -> State
instructionVectorStringSubVector = instructionSubVector vectorString
instructionVectorStringFirst :: State -> State
instructionVectorStringFirst = instructionVectorFirst string vectorString
instructionVectorStringLast :: State -> State
instructionVectorStringLast = instructionVectorLast string vectorString
instructionVectorStringNth :: State -> State
instructionVectorStringNth = instructionVectorNth string vectorString
instructionVectorStringRest :: State -> State
instructionVectorStringRest = instructionVectorRest vectorString
instructionVectorStringButLast :: State -> State
instructionVectorStringButLast = instructionVectorButLast vectorString
instructionVectorStringLength :: State -> State
instructionVectorStringLength = instructionLength vectorString
instructionVectorStringReverse :: State -> State
instructionVectorStringReverse = instructionReverse vectorString
instructionVectorStringPushAll :: State -> State
instructionVectorStringPushAll = instructionPushAll string vectorString
instructionVectorStringMakeEmpty :: State -> State
instructionVectorStringMakeEmpty = instructionVectorMakeEmpty vectorString
instructionVectorStringIsEmpty :: State -> State
instructionVectorStringIsEmpty = instructionVectorIsEmpty vectorString
instructionVectorStringIndexOf :: State -> State
instructionVectorStringIndexOf = instructionVectorIndexOf string vectorString
instructionVectorStringOccurrencesOf :: State -> State
instructionVectorStringOccurrencesOf = instructionVectorOccurrencesOf string vectorString
instructionVectorStringSetNth :: State -> State
instructionVectorStringSetNth = instructionVectorSetNth string vectorString
instructionVectorStringReplace :: State -> State
instructionVectorStringReplace = instructionVectorReplace string vectorString Nothing
instructionVectorStringReplaceFirst :: State -> State
instructionVectorStringReplaceFirst = instructionVectorReplace string vectorString (Just 1)
instructionVectorStringRemove :: State -> State
instructionVectorStringRemove = instructionVectorRemove string vectorString Nothing
instructionVectorStringIterate :: State -> State
instructionVectorStringIterate = instructionVectorIterate string vectorString GeneVectorString instructionVectorStringIterate "instructionVectorStringIterate"
instructionVectorStringPop :: State -> State instructionVectorStringPop :: State -> State
instructionVectorStringPop = instructionPop vectorString instructionVectorStringPop = instructionPop vectorString
-- |Duplicates the top string vector from the string vector stack.
instructionVectorStringDup :: State -> State instructionVectorStringDup :: State -> State
instructionVectorStringDup = instructionDup vectorString instructionVectorStringDup = instructionDup vectorString
-- |Duplicates the top string vector from the string vector stack N times
-- based on the top int from the int stack.
instructionVectorStringDupN :: State -> State instructionVectorStringDupN :: State -> State
instructionVectorStringDupN = instructionDupN vectorString instructionVectorStringDupN = instructionDupN vectorString
-- |Swaps the top two string vectors from the string vector stack.
instructionVectorStringSwap :: State -> State instructionVectorStringSwap :: State -> State
instructionVectorStringSwap = instructionSwap vectorString instructionVectorStringSwap = instructionSwap vectorString
-- |Rotates the top three string vectors from the string vector stack.
instructionVectorStringRot :: State -> State instructionVectorStringRot :: State -> State
instructionVectorStringRot = instructionRot vectorString instructionVectorStringRot = instructionRot vectorString
-- |Sets the vector string stack to []
instructionVectorStringFlush :: State -> State instructionVectorStringFlush :: State -> State
instructionVectorStringFlush = instructionFlush vectorString instructionVectorStringFlush = instructionFlush vectorString
-- |Pushes True to the bool stack if the top two string vectors from
-- the vector string stack are equal. Pushes False otherwise.
instructionVectorStringEq :: State -> State instructionVectorStringEq :: State -> State
instructionVectorStringEq = instructionEq vectorString instructionVectorStringEq = instructionEq vectorString
-- |Calculates the size of the vector string stack and pushes that number
-- to the int stack.
instructionVectorStringStackDepth :: State -> State instructionVectorStringStackDepth :: State -> State
instructionVectorStringStackDepth = instructionStackDepth vectorString instructionVectorStringStackDepth = instructionStackDepth vectorString
-- |Moves an item from deep within the vector string stack to the top of the vector string stack based on
-- the top int from the int stack.
instructionVectorStringYank :: State -> State instructionVectorStringYank :: State -> State
instructionVectorStringYank = instructionYank vectorString instructionVectorStringYank = instructionYank vectorString
-- |Copies an item from deep within the vector string stack to the top of the vector string stack based on
-- the top int from the int stack.
instructionVectorStringYankDup :: State -> State instructionVectorStringYankDup :: State -> State
instructionVectorStringYankDup = instructionYankDup vectorString instructionVectorStringYankDup = instructionYankDup vectorString
-- |Pushes True to the bool stack if the vector string stack is empty. False if not.
instructionVectorStringIsStackEmpty :: State -> State instructionVectorStringIsStackEmpty :: State -> State
instructionVectorStringIsStackEmpty = instructionIsStackEmpty vectorString instructionVectorStringIsStackEmpty = instructionIsStackEmpty vectorString
-- |Moves an item from the top of the vector string stack to deep within the vector string stack based on
-- the top int from the int stack.
instructionVectorStringShove :: State -> State instructionVectorStringShove :: State -> State
instructionVectorStringShove = instructionShove vectorString instructionVectorStringShove = instructionShove vectorString
-- |Copies an item from the top of the vector string stack to deep within the vector string stack based on
-- the top int from the int stack.
instructionVectorStringShoveDup :: State -> State instructionVectorStringShoveDup :: State -> State
instructionVectorStringShoveDup = instructionShoveDup vectorString instructionVectorStringShoveDup = instructionShoveDup vectorString
-- |Duplicate the top N items from the vector string stack based on the top int from the int stack.
instructionVectorStringDupItems :: State -> State
instructionVectorStringDupItems = instructionDupItems vectorString
-- |Concats the top two vectors on top of the vector string stack.
instructionVectorStringConcat :: State -> State
instructionVectorStringConcat = instructionVectorConcat vectorString
-- |Takes the top string from the string stack and prepends it to top string vector
-- on the string vector stack.
instructionVectorStringConj :: State -> State
instructionVectorStringConj = instructionVectorConj string vectorString
-- |Takes the top string from the string stack and appends it to top string vector
-- on the string vector stack.
instructionVectorStringConjEnd :: State -> State
instructionVectorStringConjEnd = instructionVectorConjEnd string vectorString
-- |Takes the first N strings from the top of the string vector from the string vector
-- and pushes the result to the string vector stack. N is pulled from the top of
-- the int stack.
instructionVectorStringTakeN :: State -> State
instructionVectorStringTakeN = instructionVectorTakeN vectorString
-- |Takes the last N strings from the top of the string vector from the string vector
-- and pushes the result to the string vector stack. N is pulled from the top of
-- the int stack.
instructionVectorStringTakeRN :: State -> State
instructionVectorStringTakeRN = instructionVectorTakeRN vectorString
-- |Takes a sublist of the top string vector on top of the vector string stack.
-- The two ints to determine bounds are pulled from the top of the int stack.
instructionVectorStringSubVector :: State -> State
instructionVectorStringSubVector = instructionSubVector vectorString
-- |Takes the first string from the top of the vector string stack and places
-- it on the string stack.
instructionVectorStringFirst :: State -> State
instructionVectorStringFirst = instructionVectorFirst string vectorString
-- |Takes the first string from the top of the vector string stack and places
-- it wrapped in a list on top of the vector string stack.
instructionVectorStringFromFirstPrim :: State -> State
instructionVectorStringFromFirstPrim = instructionVectorFromFirstPrim vectorString
-- |Takes the first string from the top of the string stack and places it
-- wrapped in a list on top of the vector string stack.
instructionVectorStringFromPrim :: State -> State
instructionVectorStringFromPrim = instructionVectorFromPrim string vectorString
-- |Takes the last string from the top of the vector string stack and places
-- it on the string stack.
instructionVectorStringLast :: State -> State
instructionVectorStringLast = instructionVectorLast string vectorString
-- |Takes the last string from the top string vector on the vector string stack and
-- places it on the string stack.
instructionVectorStringFromLastPrim :: State -> State
instructionVectorStringFromLastPrim = instructionVectorFromLastPrim vectorString
-- |Takes the Nth string from the top string vector and places it onto the string stack
-- based on an int from the top of the int stack.
instructionVectorStringNth :: State -> State
instructionVectorStringNth = instructionVectorNth string vectorString
-- |Takes the Nth string from the top string vector on the vector string stack and
-- creates a vector wrapping that Nth item, pushing it back onto the vector string stack.
-- N is the top item on the int stack.
instructionVectorStringFromNthPrim :: State -> State
instructionVectorStringFromNthPrim = instructionVectorFromNthPrim vectorString
-- |Removes the first string from the top string vector on the vector string stack and
-- places the result back onto the vector string stack.
instructionVectorStringRest :: State -> State
instructionVectorStringRest = instructionVectorRest vectorString
-- |Removes the last string from the top string vector on the vector string stack and
-- places the result back onto the vector string stack.
instructionVectorStringButLast :: State -> State
instructionVectorStringButLast = instructionVectorButLast vectorString
-- |Drops the first N items from the top string vector and pushes the result
-- back to the vector string stack. N is pulled from the top of the int stack.
instructionVectorStringDrop :: State -> State
instructionVectorStringDrop = instructionVectorDrop vectorString
-- |Drops the last N items from the top string vector and pushes the result
-- back to the vector string stack. N is pulled from the top of the int stack.
instructionVectorStringDropR :: State -> State
instructionVectorStringDropR = instructionVectorDropR vectorString
-- |Pushes the length of the top string vector from the vector string stack
-- to the top of the int stack.
instructionVectorStringLength :: State -> State
instructionVectorStringLength = instructionLength vectorString
-- |Reverses the top string vector from the vector string stack and pushes the
-- result to the vector string stack.
instructionVectorStringReverse :: State -> State
instructionVectorStringReverse = instructionReverse vectorString
-- |Takes the top string vector from the vector string stack and pushes the
-- individual strings to the vector string stack.
instructionVectorStringPushAll :: State -> State
instructionVectorStringPushAll = instructionPushAll string vectorString
-- |Makes an empty vector and pushes it to the vector string stack.
instructionVectorStringMakeEmpty :: State -> State
instructionVectorStringMakeEmpty = instructionVectorMakeEmpty vectorString
-- |Checks if the top string vector from the vector string stack is empty.
-- Pushes True if the string vector is empty to the bool stack. False otherwise.
instructionVectorStringIsEmpty :: State -> State
instructionVectorStringIsEmpty = instructionVectorIsEmpty vectorString
-- |If the top string vector from the vector string stack contains the top string from the string
-- stack, pushes True to the bool stack and pushes False otherwise.
instructionVectorStringContains :: State -> State
instructionVectorStringContains = instructionVectorContains string vectorString
-- |If the second to top string vector can be found within the first string vector from the
-- vector string stack, pushes True to the bool stack if is found, else False.
instructionVectorStringContainsVectorString :: State -> State
instructionVectorStringContainsVectorString = instructionVectorContainsVector vectorString
-- |Finds the first index of the top string in the string stack inside of the
-- top string vector from the vector string stack and pushes the result to the int stack.
instructionVectorStringIndexOf :: State -> State
instructionVectorStringIndexOf = instructionVectorIndexOf string vectorString
-- |Searches and pushes the index of the second string vector inside of the first
-- string vector to the int stack from the vector string stack. Pushes -1 if not found.
instructionVectorStringIndexOfVectorString :: State -> State
instructionVectorStringIndexOfVectorString = instructionVectorIndexOfVector vectorString
-- |Finds the amount of times the top string on the string stack occurs inside of
-- the top string vector from the vector string stack and pushes the result to the
-- int stack.
instructionVectorStringOccurrencesOf :: State -> State
instructionVectorStringOccurrencesOf = instructionVectorOccurrencesOf string vectorString
-- |Counts the amount of occurrences of the second string vector within the first
-- string vector. Pushes the result to the int stack.
instructionVectorStringOccurrencesOfVectorString :: State -> State
instructionVectorStringOccurrencesOfVectorString = instructionVectorOccurrencesOfVector vectorString
-- |Splits the top string vector from the vector string stack into lists of size one and pushes
-- the result back one the vector string stack.
instructionVectorStringParseToString :: State -> State
instructionVectorStringParseToString = instructionVectorParseToPrim vectorString
-- |Sets the Nth index inside of the top string vector from the vector string stack to the
-- top value from the primitive stack. N is pulled from the top of the int stack.
instructionVectorStringSetNth :: State -> State
instructionVectorStringSetNth = instructionVectorSetNth string vectorString
-- |Splits the string vector on top of the vector string stack with the string from the top
-- of the string stack and pushes the result to the original vector stack.
instructionVectorStringSplitOn :: State -> State
instructionVectorStringSplitOn = instructionVectorSplitOn string vectorString
-- |Splits the first string vector based on the second string vector from the vector
-- string stack and pushes the result to the vector string stack.
instructionVectorStringSplitOnVectorString :: State -> State
instructionVectorStringSplitOnVectorString = instructionVectorSplitOnVector vectorString
-- |Replaces the first occurrence of the top string with the second string from
-- the string stack inside of the top string vector from the vector string stack.
-- Pushes the modified string vector to the vector string stack.
instructionVectorStringReplaceFirst :: State -> State
instructionVectorStringReplaceFirst = instructionVectorReplace string vectorString (Just 1)
-- |Replaces all occurrences of the top string with the second string from
-- the string stack inside of the top string vector from the vector string stack.
-- Pushes the modified string vector to the vector string stack.
instructionVectorStringReplaceAll :: State -> State
instructionVectorStringReplaceAll = instructionVectorReplace string vectorString Nothing
-- |Replaces N occurrences of the top string with the second string from
-- the string stack inside of the top string vector from the vector string stack.
-- Pushes the modified string vector to the vector string stack. N is pulled from
-- the top of the int stack.
instructionVectorStringReplaceN :: State -> State
instructionVectorStringReplaceN = instructionVectorReplaceN string vectorString
-- |Replaces the first occurrence of the second string vector with the third string vector
-- inside of the first string vector from the vector string stack. Pushes the result to the
-- vector string stack.
instructionVectorStringReplaceFirstVectorString :: State -> State
instructionVectorStringReplaceFirstVectorString = instructionVectorReplaceVector vectorString (Just 1)
-- |Replaces all occurrences of the second string vector with the third string vector
-- inside of the first string vector from the vector string stack. Pushes the result to the
-- vector string stack.
instructionVectorStringReplaceAllVectorString :: State -> State
instructionVectorStringReplaceAllVectorString = instructionVectorReplaceVector vectorString Nothing
-- |Replaces N occurrences of the second string vector with the third string vector
-- inside of the first string vector from the vector string stack. Pushes the result to the
-- vector string stack. N is pulled from the top of the int stack.
instructionVectorStringReplaceVectorStringN :: State -> State
instructionVectorStringReplaceVectorStringN = instructionVectorReplaceVectorN vectorString
-- |Removes the first occurrence of the top string from
-- the string stack inside of the top string vector from the vector string stack.
-- Pushes the modified string vector to the vector string stack.
instructionVectorStringRemoveFirst :: State -> State
instructionVectorStringRemoveFirst = instructionVectorRemove string vectorString (Just 1)
-- |Removes the all occurrences of the top string from
-- the string stack inside of the top string vector from the vector string stack.
-- Pushes the modified string vector to the vector string stack.
instructionVectorStringRemoveAll :: State -> State
instructionVectorStringRemoveAll = instructionVectorRemove string vectorString Nothing
-- |Removes N occurrences of the top string from
-- the string stack inside of the top string vector from the vector string stack.
-- Pushes the modified string vector to the vector string stack. N is pulled
-- from the top of the int stack.
instructionVectorStringRemoveN :: State -> State
instructionVectorStringRemoveN = instructionVectorRemoveN string vectorString
-- |Removes the first occurrence of the second string vector
-- inside of the first string vector from the vector string stack. Pushes the result to the
-- vector string stack.
instructionVectorStringRemoveFirstVectorString :: State -> State
instructionVectorStringRemoveFirstVectorString = instructionVectorRemoveVector vectorString (Just 1)
-- |Removes all occurrences of the second string vector
-- inside of the first string vector from the vector string stack. Pushes the result to the
-- vector string stack.
instructionVectorStringRemoveAllVectorString :: State -> State
instructionVectorStringRemoveAllVectorString = instructionVectorRemoveVector vectorString Nothing
-- |Removes N occurrences of the second string vector
-- inside of the first string vector from the vector string stack. Pushes the result to the
-- vector string stack. N is pulled from the top of the int stack.
instructionVectorStringRemoveNVectorString :: State -> State
instructionVectorStringRemoveNVectorString = instructionVectorRemoveVectorN vectorString
-- |Iterates over the top string vector on the vector string stack, applying the top instruction of the
-- exec stack along the way.
instructionVectorStringIterate :: State -> State
instructionVectorStringIterate = instructionVectorIterate string vectorString GeneVectorString instructionVectorStringIterate "instructionVectorStringIterate"
-- |Sorts the top string vector on the vector string stack and pushes the result back to the
-- vector string stack.
instructionVectorStringSort :: State -> State instructionVectorStringSort :: State -> State
instructionVectorStringSort = instructionVectorSort vectorString instructionVectorStringSort = instructionVectorSort vectorString
-- |Sorts the top string vector on the vector string stack, reverses it, and pushes the result back to the
-- vector string stack.
instructionVectorStringSortReverse :: State -> State instructionVectorStringSortReverse :: State -> State
instructionVectorStringSortReverse = instructionVectorSortReverse vectorString instructionVectorStringSortReverse = instructionVectorSortReverse vectorString
instructionVectorStringDupItems :: State -> State -- |Inserts the top string from the string stack into the top string vector from the
instructionVectorStringDupItems = instructionDupItems vectorString -- vector string stack at a specified index and pushes the result to the vector
-- string stack. The index is pulled from the top of the int stack.
instructionVectorStringInsert :: State -> State
instructionVectorStringInsert = instructionVectorInsert string vectorString
-- |Inserts the second string vector into the first string vector from the vector string stack
-- at a specified index and pushes the result to the vector string stack. The index is
-- pulled from the top of the int stack.
instructionVectorStringInsertVectorString :: State -> State
instructionVectorStringInsertVectorString = instructionVectorInsertVector vectorString

View File

@ -12,7 +12,7 @@ import HushGP.State
-- Everntually, this can be part of the apply func to state helpers, -- Everntually, this can be part of the apply func to state helpers,
-- which should take the number and type of parameter they have. -- which should take the number and type of parameter they have.
-- This is one of the push genome functions itself, not infrastructure. -- |This is one of the push genome functions itself, not infrastructure.
-- Optionally, split this off into independent functions -- Optionally, split this off into independent functions
instructionParameterLoad :: State -> State instructionParameterLoad :: State -> State
instructionParameterLoad state@(State {_parameter = (p : _)}) = case p of instructionParameterLoad state@(State {_parameter = (p : _)}) = case p of
@ -32,11 +32,11 @@ instructionParameterLoad state@(State {_parameter = (p : _)}) = case p of
(Block xs) -> state & exec .~ xs <> view exec state (Block xs) -> state & exec .~ xs <> view exec state
instructionParameterLoad state = state instructionParameterLoad state = state
-- Loads a genome into the exec stack -- |Loads a genome into the exec stack
loadProgram :: [Gene] -> State -> State loadProgram :: [Gene] -> State -> State
loadProgram newstack state = state & exec .~ newstack loadProgram newstack state = state & exec .~ newstack
-- Takes a Push state, and generates the next push state via: -- |Takes a Push state, and generates the next push state via:
-- If the first item on the EXEC stack is a single instruction -- If the first item on the EXEC stack is a single instruction
-- then pop it and execute it. -- then pop it and execute it.
-- Else if the first item on the EXEC stack is a literal -- Else if the first item on the EXEC stack is a literal
@ -64,23 +64,3 @@ interpretExec state@(State {_exec = e : es}) =
(PlaceInput val) -> interpretExec (state {_exec = (view input state Map.! val) : es}) (PlaceInput val) -> interpretExec (state {_exec = (view input state Map.! val) : es})
Close -> undefined -- This should be removed later. Will be converted to Blocks in the Plushy -> Exec stack process Close -> undefined -- This should be removed later. Will be converted to Blocks in the Plushy -> Exec stack process
interpretExec state = state interpretExec state = state
-- interpretOneStep :: State -> State
-- interpretOneStep state@(State {_exec = e : es}) =
-- case e of
-- (GeneInt val) -> state & exec .~ es & int .~ val : view int state
-- (GeneFloat val) -> state & exec .~ es & float .~ val : view float state
-- (GeneBool val) -> state & exec .~ es & bool .~ val : view bool state
-- (GeneString val) -> state & exec .~ es & string .~ val : view string state
-- (GeneChar val) -> state & exec .~ es & char .~ val : view char state
-- (GeneVectorInt val) -> state & exec .~ es & vectorInt .~ val : view vectorInt state
-- (GeneVectorFloat val) -> state & exec .~ es & vectorFloat .~ val : view vectorFloat state
-- (GeneVectorBool val) -> state & exec .~ es & vectorBool .~ val : view vectorBool state
-- (GeneVectorString val) -> state & exec .~ es & vectorString .~ val : view vectorString state
-- (GeneVectorChar val) -> state & exec .~ es & vectorChar .~ val : view vectorChar state
-- (StateFunc (func, _)) -> func state {_exec = es}
-- (Block block) -> (state {_exec = block ++ es})
-- (PlaceInput val) -> (state {_exec = (view input state Map.! val) : es})
-- Close -> undefined
-- interpretOneStep state = state
-- Need to make interpretExec strict, right?

View File

@ -8,7 +8,7 @@ import Data.Map qualified as Map
import GHC.Generics import GHC.Generics
import Test.QuickCheck import Test.QuickCheck
-- The exec stack must store heterogenous types, -- |The exec stack must store heterogenous types,
-- and we must be able to detect that type at runtime. -- and we must be able to detect that type at runtime.
-- One solution is for the exec stack to be a list of [Gene]. -- One solution is for the exec stack to be a list of [Gene].
-- The parameter stack could be singular [Gene] or multiple [atomic] types. -- The parameter stack could be singular [Gene] or multiple [atomic] types.
@ -83,6 +83,7 @@ instance Arbitrary Gene where
return Close return Close
] ]
-- |The structure that holds all of the values.
data State = State data State = State
{ _exec :: [Gene], { _exec :: [Gene],
_code :: [Gene], _code :: [Gene],