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 ==>
*)
actualización
En su comentario a continuación Usavich, indicó que quiere pasar una lista de estas expresiones asignado a una variable a la función. Esto no es directamente posible, ya que las expresiones se evalúan en el proceso:
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}
*)
Tienes que Hold
la lista de expresiones antes de asignar:
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]}]
}
]
Con una nueva versión de exprShowAndEvaluate podemos proceso expr:
ClearAll[exprShowAndEvaluate];
exprShowAndEvaluate[expr_Hold] :=
Module[{tempExpr},
tempExpr = ReleaseHold[Map[HoldForm, expr, {2}]];
Print[#1, "=", ReleaseHold[#1]] & /@ tempExpr
];
La función ahora se puede llamar con la lista de espera:
exprShowAndEvaluate[expr]
Resultados como antes.
Funciona muy bien, pero cuando asignar expresiones a una lista, ya no funciona. '' expr = {Min [datos], Max [datos]}; '' '' exprShowAndEvaluate [expr]; '' –
Creo que tendrías que usar 'exprShowAndEvaluate [expr = {Min [data], Max [ datos]}] '. –
@Usavich Eso es porque su lista ya no contiene las expresiones originales. –