Maybe a better design would be to store the rules as anonymous functions rather than code strings? Something like:
``` rules = [(x -> x[1] && x[2]), (x -> x[3] || x[4])] #parentheses not required result = [rule(boolList) for rule in rules] ``` On Tuesday, April 26, 2016 at 12:09:33 PM UTC-4, Ali Rezaee wrote: > > > Thanks for your replies. > My objective is exactly what the code shows. I have a list of Boolean > expressions similar to the examples in the code, and I need to evaluate > them one by one based on x values. > So writing a macro would be the only solution. > > Best regards > On Tuesday, April 26, 2016 at 5:38:21 PM UTC+2, Ali Rezaee wrote: > >> Hi everyone, >> >> I am trying to run the code below. When I try the code outside of a >> function and in REPL, it runs successfully. However when I run it using a >> function it throw an error. >> Why do I get the error? and how can I solve this problem? >> >> Thanks in advance for your help. >> >> rules = ["(x[1] && x[2])", "(x[3] || x[4])"]; # a list of boolean >> expressions >> boolList = [false, true, false, true]; # a boolean vector for every x in >> rules >> >> function evaluate(rules, boolList) >> x = boolList >> result = Array{Bool}(length(rules)) >> for (i, rule) in enumerate(rules) >> result[i] = eval(parse(rule)) >> end >> return result >> end >> >> evaluate(rules, boolList) >> # ERROR: UndefVarError: x not defined >> >> # but This will work: >> x = boolList >> result = Array{Bool}(length(rules)) >> for (i, rule) in enumerate(rules) >> result[i] = eval(parse(rule)) >> end >> >> result >> # 2-element Array{Bool,1}: false true >> >> >>