. :
ExprEval[nums_, ops_] := Fold[
#2[[1]][#1, #2[[2]]] &,
First@nums,
Transpose[{ops, Rest@nums}]]
SymbolicEval[nums_, ops_] := ExprEval[nums, ToString /@ ops]
GetExpression[nums_, ops_, target_] := Select[
Tuples[ops, Length@nums - 1],
(target == ExprEval[nums, #]) &]
:
nums = {-1, 1, 2, 3};
ops = {Plus, Subtract, Times, Divide};
solutions = GetExpression[nums, ops, 3]
ExprEval[nums,
SymbolicEval[nums,
:
{{Plus, Times, Plus}, {Plus, Divide, Plus}, {Subtract, Plus,
Plus}, {Times, Plus, Times}, {Divide, Plus, Times}}
{3, 3, 3, 3, 3}
{"Plus"["Times"["Plus"[-1, 1], 2], 3],
"Plus"["Divide"["Plus"[-1, 1], 2], 3],
"Plus"["Plus"["Subtract"[-1, 1], 2], 3],
"Times"["Plus"["Times"[-1, 1], 2], 3],
"Times"["Plus"["Divide"[-1, 1], 2], 3]}
ExprEval , ( ) RPN:
ExprEval[{1, 2, 3}, {Plus, Times}] == (1 + 2) * 3
, , .
, , . Tuples, , .
, Select, , .
. . k n , O (k ^ n).
n = 10 6 , Win 7 x64, Core i7 860, 12 . :

- , - . x - nums, y - .
, . , , .
, , , .
. , . , {a, b, c, d, e, ... }, . . , O(k^n * n!), k - , n - .
:
(* generates a lists of the form
{
{number permutation, {{op order 1}, {op order 2}, ... }
}, ...
}*)
GetAllExpressions[nums_, ops_, target_] :=
ParallelMap[{
Tuples[nums, Length@nums]]