instruction list, comment cleanup, todos

This commit is contained in:
Rowan Torbitzky-Lane 2025-02-06 15:49:06 -06:00
parent 194c025486
commit 2404e7e5e1
4 changed files with 475 additions and 36 deletions

View File

@ -4,8 +4,11 @@
- [ ] Make all vector functions applicable to string functions and vice versa - [ ] Make all vector functions applicable to string functions and vice versa
- [ ] Implement all functions as seen in propeller - [ ] Implement all functions as seen in propeller
- [ ] 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
- [ ] Add a function to sort a vector - [ ] Add a function to sort a vector forward and backwards
- [ ] Disambiguate isEmpty and stackIsEmpty
- [ ] Rename Logical to Bool
- [x] Make int yank, shove, yankdup, and shovedup generic - [x] Make int yank, shove, yankdup, and shovedup generic
## PushGP TODO ## PushGP TODO

View File

@ -12,6 +12,19 @@ module Instructions
module Instructions.VectorStringInstructions, module Instructions.VectorStringInstructions,
module Instructions.VectorLogicalInstructions, module Instructions.VectorLogicalInstructions,
module Instructions.VectorCharInstructions, module Instructions.VectorCharInstructions,
allIntInstructions,
allFloatInstructions,
allBoolInstructions,
allCharInstructions,
allCodeInstructions,
allExecInstructions,
allStringInstructions,
allVectorIntInstructions,
allVectorFloatInstructions,
allVectorCharInstructions,
allVectorStringInstructions,
allVectorBoolInstructions,
allInstructions
) )
where where
@ -30,32 +43,462 @@ import Instructions.VectorLogicalInstructions
import Instructions.VectorStringInstructions import Instructions.VectorStringInstructions
import State import State
intInstructions :: [Gene] allIntInstructions :: [Gene]
intInstructions = [ allIntInstructions = map StateFunc [
StateFunc (instructionIntFromFloat, "instructionIntFromFloat"), (instructionIntFromFloat, "instructionIntFromFloat"),
StateFunc (instructionIntFromBool, "instructionIntFromBool"), (instructionIntFromBool, "instructionIntFromBool"),
StateFunc (instructionIntAdd, "instructionIntAdd"), (instructionIntAdd, "instructionIntAdd"),
StateFunc (instructionIntSub, "instructionIntSub"), (instructionIntSub, "instructionIntSub"),
StateFunc (instructionIntMul, "instructionIntMul"), (instructionIntMul, "instructionIntMul"),
StateFunc (instructionIntDiv, "instructionIntDiv"), (instructionIntDiv, "instructionIntDiv"),
StateFunc (instructionIntMod, "instructionIntMod"), (instructionIntMod, "instructionIntMod"),
StateFunc (instructionIntMin, "instructionIntMin"), (instructionIntMin, "instructionIntMin"),
StateFunc (instructionIntMax, "instructionIntMax"), (instructionIntMax, "instructionIntMax"),
StateFunc (instructionIntInc, "instructionIntInc"), (instructionIntInc, "instructionIntInc"),
StateFunc (instructionIntDec, "instructionIntDec"), (instructionIntDec, "instructionIntDec"),
StateFunc (instructionIntLT, "instructionIntLT"), (instructionIntLT, "instructionIntLT"),
StateFunc (instructionIntGT, "instructionIntGT"), (instructionIntGT, "instructionIntGT"),
StateFunc (instructionIntLTE, "instructionIntLTE"), (instructionIntLTE, "instructionIntLTE"),
StateFunc (instructionIntGTE, "instructionIntGTE"), (instructionIntGTE, "instructionIntGTE"),
StateFunc (instructionIntDup, "instructionIntDup"), (instructionIntDup, "instructionIntDup"),
StateFunc (instructionIntPop, "instructionIntPop"), (instructionIntPop, "instructionIntPop"),
StateFunc (instructionIntDupN, "instructionIntDupN"), (instructionIntDupN, "instructionIntDupN"),
StateFunc (instructionIntSwap, "instructionIntSwap"), (instructionIntSwap, "instructionIntSwap"),
StateFunc (instructionIntRot, "instructionIntRot"), (instructionIntRot, "instructionIntRot"),
StateFunc (instructionIntFlush, "instructionIntFlush"), (instructionIntFlush, "instructionIntFlush"),
StateFunc (instructionIntEq, "instructionIntEq"), (instructionIntEq, "instructionIntEq"),
StateFunc (instructionIntYank, "instructionIntYank"), (instructionIntYank, "instructionIntYank"),
StateFunc (instructionIntYankDup, "instructionIntYankDup"), (instructionIntYankDup, "instructionIntYankDup"),
StateFunc (instructionIntShove, "instructionIntShove"), (instructionIntShove, "instructionIntShove"),
StateFunc (instructionIntIsEmpty, "instructionIntIsEmpty") (instructionIntIsEmpty, "instructionIntIsEmpty")
] ]
allFloatInstructions :: [Gene]
allFloatInstructions = map StateFunc [
(instructionFloatFromInt, "instructionFloatFromInt"),
(instructionFloatFromBool, "instructionFloatFromBool"),
(instructionFloatAdd, "instructionFloatAdd"),
(instructionFloatSub, "instructionFloatSub"),
(instructionFloatMul, "instructionFloatMul"),
(instructionFloatDiv, "instructionFloatDiv"),
(instructionFloatMod, "instructionFloatMod"),
(instructionFloatMin, "instructionFloatMin"),
(instructionFloatMax, "instructionFloatMax"),
(instructionFloatInc, "instructionFloatInc"),
(instructionFloatDec, "instructionFloatDec"),
(instructionFloatLT, "instructionFloatLT"),
(instructionFloatGT, "instructionFloatGT"),
(instructionFloatLTE, "instructionFloatLTE"),
(instructionFloatGTE, "instructionFloatGTE"),
(instructionFloatDup, "instructionFloatDup"),
(instructionFloatPop, "instructionFloatPop"),
(instructionFloatDupN, "instructionFloatDupN"),
(instructionFloatSwap, "instructionFloatSwap"),
(instructionFloatRot, "instructionFloatRot"),
(instructionFloatFlush, "instructionFloatFlush"),
(instructionFloatEq, "instructionFloatEq"),
(instructionFloatYank, "instructionFloatYank"),
(instructionFloatYankDup, "instructionFloatYankDup"),
(instructionFloatShove, "instructionFloatShove"),
(instructionFloatIsEmpty, "instructionFloatIsEmpty")
]
allBoolInstructions :: [Gene]
allBoolInstructions = map StateFunc [
(instructionBoolFromInt, "instructionBoolFromInt"),
(instructionBoolFromFloat, "instructionBoolFromFloat"),
(instructionBoolAnd, "instructionBoolAnd"),
(instructionBoolInvertFirstThenAnd, "instructionBoolInvertFirstThenAnd"),
(instructionBoolInvertSecondThenAnd, "instructionBoolInvertSecondThenAnd"),
(instructionBoolOr, "instructionBoolOr"),
(instructionBoolXor, "instructionBoolXor"),
(instructionBoolPop, "instructionBoolPop"),
(instructionBoolDup, "instructionBoolDup"),
(instructionBoolDupN, "instructionBoolDupN"),
(instructionBoolSwap, "instructionBoolSwap"),
(instructionBoolRot, "instructionBoolRot"),
(instructionBoolFlush, "instructionBoolFlush"),
(instructionBoolEq, "instructionBoolEq"),
(instructionBoolStackDepth, "instructionBoolStackDepth"),
(instructionBoolYank, "instructionBoolYank"),
(instructionBoolYankDup, "instructionBoolYankDup"),
(instructionBoolShove, "instructionBoolShove"),
(instructionBoolShoveDup, "instructionBoolShoveDup"),
(instructionBoolIsEmpty, "instructionBoolIsEmpty")
]
allCharInstructions :: [Gene]
allCharInstructions = map StateFunc [
(instructionCharConcat, "instructionCharConcat"),
(instructionCharFromFirstChar, "instructionCharFromFirstChar"),
(instructionCharFromLastChar, "instructionCharFromLastChar"),
(instructionCharFromNthChar, "instructionCharFromNthChar"),
(instructionCharIsWhitespace, "instructionCharIsWhitespace"),
(instructionCharIsLetter, "instructionCharIsLetter"),
(instructionCharIsDigit, "instructionCharIsDigit"),
(instructionCharFromBool, "instructionCharFromBool"),
(instructionCharFromAsciiInt, "instructionCharFromAsciiInt"),
(instructionCharFromAsciiFloat, "instructionCharFromAsciiFloat"),
(instructionCharsFromString, "instructionCharsFromString"),
(instructionCharPop, "instructionCharPop"),
(instructionCharDup, "instructionCharDup"),
(instructionCharDupN, "instructionCharDupN"),
(instructionCharSwap, "instructionCharSwap"),
(instructionCharRot, "instructionCharRot"),
(instructionCharFlush, "instructionCharFlush"),
(instructionCharEq, "instructionCharEq"),
(instructionCharStackDepth, "instructionCharStackDepth"),
(instructionCharYank, "instructionCharYank"),
(instructionCharYankDup, "instructionCharYankDup"),
(instructionCharShove, "instructionCharShove"),
(instructionCharShoveDup, "instructionCharShoveDup"),
(instructionCharIsEmpty, "instructionCharIsEmpty")
]
allCodeInstructions :: [Gene]
allCodeInstructions = map StateFunc [
(instructionCodePop, "instructionCodePop"),
(instructionCodeIsCodeBlock, "instructionCodeIsCodeBlock"),
(instructionCodeIsSingular, "instructionCodeIsSingular"),
(instructionCodeLength, "instructionCodeLength"),
(instructionCodeFirst, "instructionCodeFirst"),
(instructionCodeLast, "instructionCodeLast"),
(instructionCodeTail, "instructionCodeTail"),
(instructionCodeInit, "instructionCodeInit"),
(instructionCodeWrap, "instructionCodeWrap"),
(instructionCodeList, "instructionCodeList"),
(instructionCodeCombine, "instructionCodeCombine"),
(instructionCodeDo, "instructionCodeDo"),
(instructionCodeDoDup, "instructionCodeDoDup"),
(instructionCodeDoThenPop, "instructionCodeDoThenPop"),
(instructionCodeDoRange, "instructionCodeDoRange"),
(instructionCodeDoCount, "instructionCodeDoCount"),
(instructionCodeDoTimes, "instructionCodeDoTimes"),
(instructionCodeIf, "instructionCodeIf"),
(instructionCodeWhen, "instructionCodeWhen"),
(instructionCodeMember, "instructionCodeMember"),
(instructionCodeN, "instructionCodeN"),
(instructionMakeEmptyCodeBlock, "instructionMakeEmptyCodeBlock"),
(instructionIsEmptyCodeBlock, "instructionIsEmptyCodeBlock"),
(instructionCodeSize, "instructionCodeSize"),
(instructionCodeExtract, "instructionCodeExtract"),
(instructionCodeInsert, "instructionCodeInsert"),
(instructionCodeFirstPosition, "instructionCodeFirstPosition"),
(instructionCodeReverse, "instructionCodeReverse"),
(instructionCodeDup, "instructionCodeDup"),
(instructionCodeDupN, "instructionCodeDupN"),
(instructionCodeDup, "instructionCodeDup"),
(instructionCodeDupN, "instructionCodeDupN"),
(instructionCodeSwap, "instructionCodeSwap"),
(instructionCodeRot, "instructionCodeRot"),
(instructionCodeFlush, "instructionCodeFlush"),
(instructionCodeEq, "instructionCodeEq"),
(instructionCodeStackDepth, "instructionCodeStackDepth"),
(instructionCodeYank, "instructionCodeYank"),
(instructionCodeYankDup, "instructionCodeYankDup"),
(instructionCodeShove, "instructionCodeShove"),
(instructionCodeShoveDup, "instructionCodeShoveDup"),
(instructionCodeStackIsEmpty, "instructionCodeStackIsEmpty"),
(instructionCodeFromBool, "instructionCodeFromBool"),
(instructionCodeFromInt, "instructionCodeFromInt"),
(instructionCodeFromChar, "instructionCodeFromChar"),
(instructionCodeFromFloat, "instructionCodeFromFloat"),
(instructionCodeFromString, "instructionCodeFromString"),
(instructionCodeFromVectorInt, "instructionCodeFromVectorInt"),
(instructionCodeFromVectorFloat, "instructionCodeFromVectorFloat"),
(instructionCodeFromVectorString, "instructionCodeFromVectorString"),
(instructionCodeFromVectorBool, "instructionCodeFromVectorBool"),
(instructionCodeFromVectorChar, "instructionCodeFromVectorChar"),
(instructionCodeFromExec, "instructionCodeFromExec")
]
allExecInstructions :: [Gene]
allExecInstructions = map StateFunc [
(instructionExecIf, "instructionExecIf"),
(instructionExecDup, "instructionExecDup"),
(instructionExecDupN, "instructionExecDupN"),
(instructionExecPop, "instructionExecPop"),
(instructionExecSwap, "instructionExecSwap"),
(instructionExecRot, "instructionExecRot"),
(instructionExecFlush, "instructionExecFlush"),
(instructionExecEq, "instructionExecEq"),
(instructionExecStackDepth, "instructionExecStackDepth"),
(instructionExecYank, "instructionExecYank"),
(instructionExecYankDup, "instructionExecYankDup"),
(instructionExecShove, "instructionExecShove"),
(instructionExecShoveDup, "instructionExecShoveDup"),
(instructionExecIsEmpty, "instructionExecIsEmpty"),
(instructionExecDoRange, "instructionExecDoRange"),
(instructionExecDoCount, "instructionExecDoCount"),
(instructionExecDoTimes, "instructionExecDoTimes"),
(instructionExecWhile, "instructionExecWhile"),
(instructionExecDoWhile, "instructionExecDoWhile"),
(instructionExecWhen, "instructionExecWhen")
]
allStringInstructions :: [Gene]
allStringInstructions = map StateFunc [
(instructionStringConcat, "instructionStringConcat"),
(instructionStringSwap, "instructionStringSwap"),
(instructionStringInsertString, "instructionStringInsertString"),
(instructionStringFromFirstChar, "instructionStringFromFirstChar"),
(instructionStringFromLastChar, "instructionStringFromLastChar"),
(instructionStringFromNthChar, "instructionStringFromNthChar"),
(instructionStringIndexOfString, "instructionStringIndexOfString"),
(instructionStringContainsString, "instructionStringContainsString"),
(instructionStringSplitOnString, "instructionStringSplitOnString"),
(instructionStringReplaceFirstString, "instructionStringReplaceFirstString"),
(instructionStringReplaceNString, "instructionStringReplaceNString"),
(instructionStringReplaceAllString, "instructionStringReplaceAllString"),
(instructionStringRemoveFirstString, "instructionStringRemoveFirstString"),
(instructionStringRemoveNString, "instructionStringRemoveNString"),
(instructionStringRemoveAllString, "instructionStringRemoveAllString"),
(instructionStringOccurrencesOfString, "instructionStringOccurrencesOfString"),
(instructionStringInsertChar, "instructionStringInsertChar"),
(instructionStringContainsChar, "instructionStringContainsChar"),
(instructionStringIndexOfChar, "instructionStringIndexOfChar"),
(instructionStringSplitOnChar, "instructionStringSplitOnChar"),
(instructionStringReplaceFirstChar, "instructionStringReplaceFirstChar"),
(instructionStringReplaceNChar, "instructionStringReplaceNChar"),
(instructionStringReplaceAllChar, "instructionStringReplaceAllChar"),
(instructionStringRemoveFirstChar, "instructionStringRemoveFirstChar"),
(instructionStringRemoveNChar, "instructionStringRemoveNChar"),
(instructionStringRemoveAllChar, "instructionStringRemoveAllChar"),
(instructionStringOccurrencesOfChar, "instructionStringOccurrencesOfChar"),
(instructionStringReverse, "instructionStringReverse"),
(instructionStringHead, "instructionStringHead"),
(instructionStringTail, "instructionStringTail"),
(instructionStringAppendChar, "instructionStringAppendChar"),
(instructionStringRest, "instructionStringRest"),
(instructionStringButLast, "instructionStringButLast"),
(instructionStringDrop, "instructionStringDrop"),
(instructionStringButLastN, "instructionStringButLastN"),
(instructionStringLength, "instructionStringLength"),
(instructionStringMakeEmpty, "instructionStringMakeEmpty"),
(instructionStringIsEmptyString, "instructionStringIsEmptyString"),
(instructionStringRemoveNth, "instructionStringRemoveNth"),
(instructionStringSetNth, "instructionStringSetNth"),
(instructionStringStripWhitespace, "instructionStringStripWhitespace"),
(instructionStringFromBool, "instructionStringFromBool"),
(instructionStringFromInt, "instructionStringFromInt"),
(instructionStringFromFloat, "instructionStringFromFloat"),
(instructionStringFromChar, "instructionStringFromChar"),
(instructionStringPop, "instructionStringPop"),
(instructionStringDup, "instructionStringDup"),
(instructionStringDupN, "instructionStringDupN"),
(instructionStringSwap, "instructionStringSwap"),
(instructionStringRot, "instructionStringRot"),
(instructionStringFlush, "instructionStringFlush"),
(instructionStringEq, "instructionStringEq"),
(instructionStringStackDepth, "instructionStringStackDepth"),
(instructionStringYank, "instructionStringYank"),
(instructionStringYankDup, "instructionStringYankDup"),
(instructionStringShove, "instructionStringShove"),
(instructionStringShoveDup, "instructionStringShoveDup"),
(instructionStringIsEmpty, "instructionStringIsEmpty")
]
allVectorIntInstructions :: [Gene]
allVectorIntInstructions = map StateFunc [
(instructionVectorIntConcat, "instructionVectorIntConcat"),
(instructionVectorIntConj, "instructionVectorIntConj"),
(instructionVectorIntTakeN, "instructionVectorIntTakeN"),
(instructionVectorIntSubVector, "instructionVectorIntSubVector"),
(instructionVectorIntFirst, "instructionVectorIntFirst"),
(instructionVectorIntLast, "instructionVectorIntLast"),
(instructionVectorIntNth, "instructionVectorIntNth"),
(instructionVectorIntRest, "instructionVectorIntRest"),
(instructionVectorIntButLast, "instructionVectorIntButLast"),
(instructionVectorIntLength, "instructionVectorIntLength"),
(instructionVectorIntReverse, "instructionVectorIntReverse"),
(instructionVectorIntPushAll, "instructionVectorIntPushAll"),
(instructionVectorIntMakeEmpty, "instructionVectorIntMakeEmpty"),
(instructionVectorIntIsEmpty, "instructionVectorIntIsEmpty"),
(instructionVectorIntIndexOf, "instructionVectorIntIndexOf"),
(instructionVectorIntOccurrencesOf, "instructionVectorIntOccurrencesOf"),
(instructionVectorIntSetNth, "instructionVectorIntSetNth"),
(instructionVectorIntReplace, "instructionVectorIntReplace"),
(instructionVectorIntReplaceFirst, "instructionVectorIntReplaceFirst"),
(instructionVectorIntRemove, "instructionVectorIntRemove"),
(instructionVectorIntIterate, "instructionVectorIntIterate"),
(instructionVectorIntPop, "instructionVectorIntPop"),
(instructionVectorIntDup, "instructionVectorIntDup"),
(instructionVectorIntDupN, "instructionVectorIntDupN"),
(instructionVectorIntSwap, "instructionVectorIntSwap"),
(instructionVectorIntRot, "instructionVectorIntRot"),
(instructionVectorIntFlush, "instructionVectorIntFlush"),
(instructionVectorIntEq, "instructionVectorIntEq"),
(instructionVectorIntStackDepth, "instructionVectorIntStackDepth"),
(instructionVectorIntYank, "instructionVectorIntYank"),
(instructionVectorIntYankDup, "instructionVectorIntYankDup"),
(instructionVectorIntShove, "instructionVectorIntShove"),
(instructionVectorIntShoveDup, "instructionVectorIntShoveDup"),
(instructionVectorIntStackIsEmpty, "instructionVectorIntStackIsEmpty")
]
allVectorFloatInstructions :: [Gene]
allVectorFloatInstructions = map StateFunc [
(instructionVectorFloatConcat, "instructionVectorFloatConcat"),
(instructionVectorFloatConj, "instructionVectorFloatConj"),
(instructionVectorFloatTakeN, "instructionVectorFloatTakeN"),
(instructionVectorFloatSubVector, "instructionVectorFloatSubVector"),
(instructionVectorFloatFirst, "instructionVectorFloatFirst"),
(instructionVectorFloatLast, "instructionVectorFloatLast"),
(instructionVectorFloatNth, "instructionVectorFloatNth"),
(instructionVectorFloatRest, "instructionVectorFloatRest"),
(instructionVectorFloatButLast, "instructionVectorFloatButLast"),
(instructionVectorFloatLength, "instructionVectorFloatLength"),
(instructionVectorFloatReverse, "instructionVectorFloatReverse"),
(instructionVectorFloatPushAll, "instructionVectorFloatPushAll"),
(instructionVectorFloatMakeEmpty, "instructionVectorFloatMakeEmpty"),
(instructionVectorFloatIsEmpty, "instructionVectorFloatIsEmpty"),
(instructionVectorFloatIndexOf, "instructionVectorFloatIndexOf"),
(instructionVectorFloatOccurrencesOf, "instructionVectorFloatOccurrencesOf"),
(instructionVectorFloatSetNth, "instructionVectorFloatSetNth"),
(instructionVectorFloatReplace, "instructionVectorFloatReplace"),
(instructionVectorFloatReplaceFirst, "instructionVectorFloatReplaceFirst"),
(instructionVectorFloatRemove, "instructionVectorFloatRemove"),
(instructionVectorFloatIterate, "instructionVectorFloatIterate"),
(instructionVectorFloatPop, "instructionVectorFloatPop"),
(instructionVectorFloatDup, "instructionVectorFloatDup"),
(instructionVectorFloatDupN, "instructionVectorFloatDupN"),
(instructionVectorFloatSwap, "instructionVectorFloatSwap"),
(instructionVectorFloatRot, "instructionVectorFloatRot"),
(instructionVectorFloatFlush, "instructionVectorFloatFlush"),
(instructionVectorFloatEq, "instructionVectorFloatEq"),
(instructionVectorFloatStackDepth, "instructionVectorFloatStackDepth"),
(instructionVectorFloatYank, "instructionVectorFloatYank"),
(instructionVectorFloatYankDup, "instructionVectorFloatYankDup"),
(instructionVectorFloatShove, "instructionVectorFloatShove"),
(instructionVectorFloatShoveDup, "instructionVectorFloatShoveDup"),
(instructionVectorFloatStackIsEmpty, "instructionVectorFloatStackIsEmpty")
]
allVectorCharInstructions :: [Gene]
allVectorCharInstructions = map StateFunc [
(instructionVectorCharConcat, "instructionVectorCharConcat"),
(instructionVectorCharConj, "instructionVectorCharConj"),
(instructionVectorCharTakeN, "instructionVectorCharTakeN"),
(instructionVectorCharSubVector, "instructionVectorCharSubVector"),
(instructionVectorCharFirst, "instructionVectorCharFirst"),
(instructionVectorCharLast, "instructionVectorCharLast"),
(instructionVectorCharNth, "instructionVectorCharNth"),
(instructionVectorCharRest, "instructionVectorCharRest"),
(instructionVectorCharButLast, "instructionVectorCharButLast"),
(instructionVectorCharLength, "instructionVectorCharLength"),
(instructionVectorCharReverse, "instructionVectorCharReverse"),
(instructionVectorCharPushAll, "instructionVectorCharPushAll"),
(instructionVectorCharMakeEmpty, "instructionVectorCharMakeEmpty"),
(instructionVectorCharIsEmpty, "instructionVectorCharIsEmpty"),
(instructionVectorCharIndexOf, "instructionVectorCharIndexOf"),
(instructionVectorCharOccurrencesOf, "instructionVectorCharOccurrencesOf"),
(instructionVectorCharSetNth, "instructionVectorCharSetNth"),
(instructionVectorCharReplace, "instructionVectorCharReplace"),
(instructionVectorCharReplaceFirst, "instructionVectorCharReplaceFirst"),
(instructionVectorCharRemove, "instructionVectorCharRemove"),
(instructionVectorCharIterate, "instructionVectorCharIterate"),
(instructionVectorCharPop, "instructionVectorCharPop"),
(instructionVectorCharDup, "instructionVectorCharDup"),
(instructionVectorCharDupN, "instructionVectorCharDupN"),
(instructionVectorCharSwap, "instructionVectorCharSwap"),
(instructionVectorCharRot, "instructionVectorCharRot"),
(instructionVectorCharFlush, "instructionVectorCharFlush"),
(instructionVectorCharEq, "instructionVectorCharEq"),
(instructionVectorCharStackDepth, "instructionVectorCharStackDepth"),
(instructionVectorCharYank, "instructionVectorCharYank"),
(instructionVectorCharYankDup, "instructionVectorCharYankDup"),
(instructionVectorCharShove, "instructionVectorCharShove"),
(instructionVectorCharShoveDup, "instructionVectorCharShoveDup"),
(instructionVectorCharStackIsEmpty, "instructionVectorCharStackIsEmpty")
]
allVectorStringInstructions :: [Gene]
allVectorStringInstructions = map StateFunc [
(instructionVectorStringConcat, "instructionVectorStringConcat"),
(instructionVectorStringConj, "instructionVectorStringConj"),
(instructionVectorStringTakeN, "instructionVectorStringTakeN"),
(instructionVectorStringSubVector, "instructionVectorStringSubVector"),
(instructionVectorStringFirst, "instructionVectorStringFirst"),
(instructionVectorStringLast, "instructionVectorStringLast"),
(instructionVectorStringNth, "instructionVectorStringNth"),
(instructionVectorStringRest, "instructionVectorStringRest"),
(instructionVectorStringButLast, "instructionVectorStringButLast"),
(instructionVectorStringLength, "instructionVectorStringLength"),
(instructionVectorStringReverse, "instructionVectorStringReverse"),
(instructionVectorStringPushAll, "instructionVectorStringPushAll"),
(instructionVectorStringMakeEmpty, "instructionVectorStringMakeEmpty"),
(instructionVectorStringIsEmpty, "instructionVectorStringIsEmpty"),
(instructionVectorStringIndexOf, "instructionVectorStringIndexOf"),
(instructionVectorStringOccurrencesOf, "instructionVectorStringOccurrencesOf"),
(instructionVectorStringSetNth, "instructionVectorStringSetNth"),
(instructionVectorStringReplace, "instructionVectorStringReplace"),
(instructionVectorStringReplaceFirst, "instructionVectorStringReplaceFirst"),
(instructionVectorStringRemove, "instructionVectorStringRemove"),
(instructionVectorStringIterate, "instructionVectorStringIterate"),
(instructionVectorStringPop, "instructionVectorStringPop"),
(instructionVectorStringDup, "instructionVectorStringDup"),
(instructionVectorStringDupN, "instructionVectorStringDupN"),
(instructionVectorStringSwap, "instructionVectorStringSwap"),
(instructionVectorStringRot, "instructionVectorStringRot"),
(instructionVectorStringFlush, "instructionVectorStringFlush"),
(instructionVectorStringEq, "instructionVectorStringEq"),
(instructionVectorStringStackDepth, "instructionVectorStringStackDepth"),
(instructionVectorStringYank, "instructionVectorStringYank"),
(instructionVectorStringYankDup, "instructionVectorStringYankDup"),
(instructionVectorStringShove, "instructionVectorStringShove"),
(instructionVectorStringShoveDup, "instructionVectorStringShoveDup"),
(instructionVectorStringStackIsEmpty, "instructionVectorStringStackIsEmpty")
]
allVectorBoolInstructions :: [Gene]
allVectorBoolInstructions = map StateFunc [
(instructionVectorBoolConcat, "instructionVectorBoolConcat"),
(instructionVectorBoolConj, "instructionVectorBoolConj"),
(instructionVectorBoolTakeN, "instructionVectorBoolTakeN"),
(instructionVectorBoolSubVector, "instructionVectorBoolSubVector"),
(instructionVectorBoolFirst, "instructionVectorBoolFirst"),
(instructionVectorBoolLast, "instructionVectorBoolLast"),
(instructionVectorBoolNth, "instructionVectorBoolNth"),
(instructionVectorBoolRest, "instructionVectorBoolRest"),
(instructionVectorBoolButLast, "instructionVectorBoolButLast"),
(instructionVectorBoolLength, "instructionVectorBoolLength"),
(instructionVectorBoolReverse, "instructionVectorBoolReverse"),
(instructionVectorBoolPushAll, "instructionVectorBoolPushAll"),
(instructionVectorBoolMakeEmpty, "instructionVectorBoolMakeEmpty"),
(instructionVectorBoolIsEmpty, "instructionVectorBoolIsEmpty"),
(instructionVectorBoolIndexOf, "instructionVectorBoolIndexOf"),
(instructionVectorBoolOccurrencesOf, "instructionVectorBoolOccurrencesOf"),
(instructionVectorBoolSetNth, "instructionVectorBoolSetNth"),
(instructionVectorBoolReplace, "instructionVectorBoolReplace"),
(instructionVectorBoolReplaceFirst, "instructionVectorBoolReplaceFirst"),
(instructionVectorBoolRemove, "instructionVectorBoolRemove"),
(instructionVectorBoolIterate, "instructionVectorBoolIterate"),
(instructionVectorBoolPop, "instructionVectorBoolPop"),
(instructionVectorBoolDup, "instructionVectorBoolDup"),
(instructionVectorBoolDupN, "instructionVectorBoolDupN"),
(instructionVectorBoolSwap, "instructionVectorBoolSwap"),
(instructionVectorBoolRot, "instructionVectorBoolRot"),
(instructionVectorBoolFlush, "instructionVectorBoolFlush"),
(instructionVectorBoolEq, "instructionVectorBoolEq"),
(instructionVectorBoolStackDepth, "instructionVectorBoolStackDepth"),
(instructionVectorBoolYank, "instructionVectorBoolYank"),
(instructionVectorBoolYankDup, "instructionVectorBoolYankDup"),
(instructionVectorBoolShove, "instructionVectorBoolShove"),
(instructionVectorBoolShoveDup, "instructionVectorBoolShoveDup"),
(instructionVectorBoolStackIsEmpty, "instructionVectorBoolStackIsEmpty")
]
allInstructions :: [Gene]
allInstructions =
allIntInstructions <>
allFloatInstructions <>
allBoolInstructions <>
allCharInstructions <>
allCodeInstructions <>
allExecInstructions <>
allStringInstructions <>
allVectorIntInstructions <>
allVectorFloatInstructions <>
allVectorCharInstructions <>
allVectorStringInstructions <>
allVectorBoolInstructions

View File

@ -66,7 +66,6 @@ codeMember (Block _) (Block _) = False -- Can't compare two lists with `elem`
codeMember (Block xs) ygene = ygene `elem` xs codeMember (Block xs) ygene = ygene `elem` xs
codeMember _ _ = False codeMember _ _ = False
-- I love list comprehensions
codeRecursiveSize :: Gene -> Int codeRecursiveSize :: Gene -> Int
codeRecursiveSize (Block xs) = sum [codeRecursiveSize x + if isBlock x then 1 else 0 | x <- xs] codeRecursiveSize (Block xs) = sum [codeRecursiveSize x + if isBlock x then 1 else 0 | x <- xs]
codeRecursiveSize _ = 1 codeRecursiveSize _ = 1
@ -224,11 +223,6 @@ instructionCodeInsert state@(State {_code = c1 : c2 : cs, _int = i1 : is}) =
state{_code = Block (codeInsertAtPoint [c1] c2 index) : cs, _int = is} state{_code = Block (codeInsertAtPoint [c1] c2 index) : cs, _int = is}
instructionCodeInsert state = state instructionCodeInsert state = state
-- How do I test if two functions are the same??????????
-- This will impact the final case. This implementation can't determine
-- if two functions are the same, so it assumes that they are.
-- Maybe can test for equality by seeing if these two functions affect the current state
-- in the same way.
instructionCodeFirstPosition :: State -> State instructionCodeFirstPosition :: State -> State
instructionCodeFirstPosition state@(State {_code = (Block []) : c2 : cs, _int = is}) = state {_code = cs, _int = (if c2 == Block [] then 0 else -1) : is} instructionCodeFirstPosition state@(State {_code = (Block []) : c2 : cs, _int = is}) = state {_code = cs, _int = (if c2 == Block [] then 0 else -1) : is}
instructionCodeFirstPosition state@(State {_code = (Block c1) : c2 : cs, _int = is}) = state {_code = cs, _int = positionElem c1 c2 : is} instructionCodeFirstPosition state@(State {_code = (Block c1) : c2 : cs, _int = is}) = state {_code = cs, _int = positionElem c1 c2 : is}

View File

@ -175,7 +175,6 @@ instructionStringStripWhitespace :: State -> State
instructionStringStripWhitespace state@(State {_string = s1 : ss}) = state{_string = strip s1 : ss} instructionStringStripWhitespace state@(State {_string = s1 : ss}) = state{_string = strip s1 : ss}
instructionStringStripWhitespace state = state instructionStringStripWhitespace state = state
-- Need to do uncons to all of the warnings in this mug
instructionStringFromLens :: Show a => State -> Lens' State [a] -> State instructionStringFromLens :: Show a => State -> Lens' State [a] -> State
instructionStringFromLens state@(State {_string = ss}) accessor = instructionStringFromLens state@(State {_string = ss}) accessor =
case uncons (view accessor state) of case uncons (view accessor state) of