more instructions, need to test instructionCodeN
This commit is contained in:
parent
f59775273a
commit
2ba43396d7
@ -12,6 +12,10 @@ blockLength :: Gene -> Int
|
|||||||
blockLength (Block xs) = length xs
|
blockLength (Block xs) = length xs
|
||||||
blockLength _ = 1
|
blockLength _ = 1
|
||||||
|
|
||||||
|
blockIsNull :: Gene -> Bool
|
||||||
|
blockIsNull (Block xs) = null xs
|
||||||
|
blockIsNull _ = False
|
||||||
|
|
||||||
-- I think I can abstract the boilerplate base case check for a lot of these
|
-- I think I can abstract the boilerplate base case check for a lot of these
|
||||||
-- with a different function
|
-- with a different function
|
||||||
|
|
||||||
@ -40,6 +44,11 @@ codeCombine (Block xs) ygene = Block (xs <> [ygene])
|
|||||||
codeCombine xgene (Block ys) = Block (xgene : ys)
|
codeCombine xgene (Block ys) = Block (xgene : ys)
|
||||||
codeCombine xgene ygene = Block [xgene, ygene]
|
codeCombine xgene ygene = Block [xgene, ygene]
|
||||||
|
|
||||||
|
codeMember :: Gene -> Gene -> Bool
|
||||||
|
codeMember (Block _) (Block _) = False -- Can't compare two lists with `elem`
|
||||||
|
codeMember (Block xs) ygene = ygene `elem` xs
|
||||||
|
codeMember _ _ = False
|
||||||
|
|
||||||
instructionCodePop :: State -> State
|
instructionCodePop :: State -> State
|
||||||
instructionCodePop state = instructionPop state code
|
instructionCodePop state = instructionPop state code
|
||||||
|
|
||||||
@ -136,3 +145,18 @@ instructionCodeIf state = state
|
|||||||
instructionCodeWhen :: State -> State
|
instructionCodeWhen :: State -> State
|
||||||
instructionCodeWhen state@(State {_code = (c1 : cs), _bool = (b1 : bs), _exec = es}) = state{_code = cs, _bool = bs, _exec = if b1 then c1 : es else es}
|
instructionCodeWhen state@(State {_code = (c1 : cs), _bool = (b1 : bs), _exec = es}) = state{_code = cs, _bool = bs, _exec = if b1 then c1 : es else es}
|
||||||
instructionCodeWhen state = state
|
instructionCodeWhen state = state
|
||||||
|
|
||||||
|
instructionCodeMember :: State -> State
|
||||||
|
instructionCodeMember state@(State {_code = (c1 : c2 : cs), _bool = bs}) = state{_code = cs, _bool = codeMember c1 c2 : bs}
|
||||||
|
instructionCodeMember state = state
|
||||||
|
|
||||||
|
-- https://erp12.github.io/pyshgp/html/core_instructions.html#code-nth
|
||||||
|
instructionCodeN :: State -> State
|
||||||
|
instructionCodeN state@(State {_code = (c1 : cs), _int = (_ : is)}) =
|
||||||
|
if not $ blockIsNull c1Block
|
||||||
|
then state {_code = c1Block : cs, _int = is}
|
||||||
|
else state
|
||||||
|
where
|
||||||
|
c1Block :: Gene
|
||||||
|
c1Block = if not $ isBlock c1 then Block [c1] else c1
|
||||||
|
instructionCodeN state = state
|
||||||
|
@ -107,4 +107,7 @@ main = do
|
|||||||
intTestFunc "instructionCodeIfTrue" [6] [GeneBool True, StateFunc instructionCodeFromExec, GeneInt 3, StateFunc instructionCodeFromExec, GeneInt 6, StateFunc instructionCodeIf] emptyState
|
intTestFunc "instructionCodeIfTrue" [6] [GeneBool True, StateFunc instructionCodeFromExec, GeneInt 3, StateFunc instructionCodeFromExec, GeneInt 6, StateFunc instructionCodeIf] emptyState
|
||||||
intTestFunc "instructionCodeIfFalse" [3] [GeneBool False, StateFunc instructionCodeFromExec, GeneInt 3, StateFunc instructionCodeFromExec, GeneInt 6, StateFunc instructionCodeIf] emptyState
|
intTestFunc "instructionCodeIfFalse" [3] [GeneBool False, StateFunc instructionCodeFromExec, GeneInt 3, StateFunc instructionCodeFromExec, GeneInt 6, StateFunc instructionCodeIf] emptyState
|
||||||
intTestFunc "instructionCodeWhen" [6, 3, 6] [GeneInt 6, GeneInt 3, GeneInt 4, GeneInt 2, GeneBool True, StateFunc instructionCodeFromExec, StateFunc instructionIntAdd, StateFunc instructionCodeWhen] emptyState
|
intTestFunc "instructionCodeWhen" [6, 3, 6] [GeneInt 6, GeneInt 3, GeneInt 4, GeneInt 2, GeneBool True, StateFunc instructionCodeFromExec, StateFunc instructionIntAdd, StateFunc instructionCodeWhen] emptyState
|
||||||
-- stopped for the night at https://erp12.github.io/pyshgp/html/core_instructions.html#code-member
|
boolTestFunc "instructionCodeMemberTrue" [True] [StateFunc instructionCodeFromExec, GeneInt 2, StateFunc instructionCodeFromExec, Block [GeneFloat 3.6, GeneInt 2, GeneIntVector [8, 9]], StateFunc instructionCodeMember] emptyState
|
||||||
|
boolTestFunc "instructionCodeMemberFalse" [False] [StateFunc instructionCodeFromExec, GeneInt 7, StateFunc instructionCodeFromExec, Block [GeneFloat 3.6, GeneInt 2, GeneIntVector [8, 9]], StateFunc instructionCodeMember] emptyState
|
||||||
|
boolTestFunc "instructionCodeMember2Blocks" [False] [StateFunc instructionCodeFromExec, Block [GeneInt 7, GeneInt 0], StateFunc instructionCodeFromExec, Block [GeneFloat 3.6, GeneInt 2, GeneIntVector [8, 9]], StateFunc instructionCodeMember] emptyState
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user