data = {1, 2, 3, 4};
data1 = {2, 1, 4, 3};
ClearAll[exprShowAndEvaluate];
SetAttributes[exprShowAndEvaluate, {HoldAll, Listable}];
exprShowAndEvaluate[expr_] := Print[HoldForm[expr], "=", expr];
exprShowAndEvaluate[{Min[data],
Max[data],
Covariance[data, data1],
Mean[data],
GeometricMean[data],
Total[data],
Sum[Log[data[[i]]], {i, 1, Length[data]}],
Sum[(data[[i]])^2, {i, 1, Length[data]}]}];
(* output ==>
*)
Mise à jour
Dans son commentaire ci-dessous Usavich, a indiqué qu'il veut transmettre une liste de ces expressions attribué à une variable à la fonction. Ce n'est pas directement possible que les expressions sont dans le processus:
expr =
{
Min[data], Max[data], Covariance[data, data1], Mean[data],
GeometricMean[data], Total[data],
Sum[Log[data[[i]]], {i, 1, Length[data]}],
Sum[(data[[i]])^2, {i, 1, Length[data]}]
}
(* Output ==>
{1, 4, 1, 5/2, 2^(3/4) 3^(1/4), 10, Log[2] + Log[3] + Log[4], 30}
*)
Vous devez Hold
la liste d'expression avant d'attribuer:
expr =
Hold[
{
Min[data], Max[data], Covariance[data, data1], Mean[data],
GeometricMean[data], Total[data],
Sum[Log[data[[i]]], {i, 1, Length[data]}],
Sum[(data[[i]])^2, {i, 1, Length[data]}]
}
]
Avec une nouvelle version de exprShowAndEvaluate nous pouvons exprimer le processus:
ClearAll[exprShowAndEvaluate];
exprShowAndEvaluate[expr_Hold] :=
Module[{tempExpr},
tempExpr = ReleaseHold[Map[HoldForm, expr, {2}]];
Print[#1, "=", ReleaseHold[#1]] & /@ tempExpr
];
La fonction peut maintenant être appelée avec la liste tenue:
exprShowAndEvaluate[expr]
Résultats qu'avant.
Fonctionne bien, mais quand affecter des expressions à une liste, cela ne fonctionne plus. '' expr = {Min [données], Max [données]}; '' exprShowAndEvaluate [expr]; '' –
Je pense que vous devriez utiliser 'exprShowAndEvaluate [expr = {Min [données], Max [ données]}] '. –
@Usavich C'est parce que votre liste ne contient plus les expressions originales. –