Bueno, sabe que hay tres argumentos sólo para:
In[13]:= Function[x, Length[Unevaluated[x]], HoldAll][{1,
Sequence[2, 3], 4}]
Out[13]= 3
Si se permite que x para evaluar, a continuación,
In[14]:= Function[x, Length[x], HoldAll][{1, Sequence[2, 3], 4}]
Out[14]= 4
EDIT: Uno lo ve mejor con:
In[15]:= Hold[{1, Sequence[2, 3], 4}]
Out[15]= Hold[{1, Sequence[2, 3], 4}]
en otras palabras, el aplanamiento de Sequence requiere un evaluador.
EDIT 2: Eché de menos la verdadera pregunta planteada y trataré de responderla ahora.
Once Plot determina el número de argumentos que construye {{style1, Line ..}, {style2, Line ..}, ...}. En el caso de {1, Secuencia [2,3], 4} se obtiene la siguiente estructura:
In[23]:= Cases[
Plot[{1, Sequence[2, 3], 4}, {x, 0, 1},
PlotRange -> {0, 5}], {_Hue, __Line},
Infinity] /. {x_Line :> Line, _Hue -> Hue}
Out[23]= {{Hue, Line}, {Hue, Line, Line}, {Hue, Line}}
Al trazar {1,} {2,3, 4} obtenemos una estructura diferente:
In[24]:= Cases[
Plot[{1, List[2, 3], 4}, {x, 0, 1},
PlotRange -> {0, 5}], {_Hue, __Line},
Infinity] /. {x_Line :> Line, _Hue -> Hue}
Out[24]= {{Hue, Line}, {Hue, Line}, {Hue, Line}, {Hue, Line}}
porque las listas se aplanarían, simplemente no se usaría el evaluador. Así que como ves el etiquetado en el mismo color se debe a la Secuencia [2,3] se trata como una función de recuadro negro que devuelve una lista de dos elementos:
In[25]:= g[x_?NumberQ] := {2, 3}
In[26]:= Cases[
Plot[{1, g[x], 4}, {x, 0, 1}, PlotRange -> {0, 5}], {_Hue, __Line},
Infinity] /. {x_Line :> Line, _Hue -> Hue}
Out[26]= {{Hue, Line}, {Hue, Line, Line}, {Hue, Line}}
yo estaba tratando de construir un alto nivel implementación que construiría tal estructura, pero uno tiene que luchar contra el evaluador.Por ejemplo:
In[28]:= Thread /@ Function[x,
Thread[{Hold @@ {Range[Length[Unevaluated[x]]]}, Hold[x]}, Hold]
, HoldAll][{1, Sequence[2, 3], 4}]
Out[28]= Hold[Thread[{{1, 2, 3}, {1, Sequence[2, 3], 4}}]]
Ahora tenemos que evaluar la rosca sin evaluar sus argumentos, lo que daría {{1, 1}, {2, Secuencia [2,3]}, {3, 4}} , donde el primer elemento de la lista es una etiqueta, y las siguientes son funciones para ser muestreadas.
Espero que esto ayude.
Interesante pregunta, ya que 'Plot' tiene el atributo' HoldAll' que aún se supone que expande los objetos 'Sequence', lo que implica que 'Plot' debería ver 4 elementos en la lista. – rcollyer
@rcollyer Los objetos de secuencia solo se expandirán en el primer nivel de una función con el atributo 'HoldAll'. Compare 'Mantenga [{1, Sequence [2, 3], 4}]' con 'Hold [1, Sequence [2, 3], 4]'. Lo mismo se aplica a 'Evaluar', por ej. 'Mantenga presionada [{Evaluate [1 + 1]}]' vs 'Hold [Evaluate [1 + 1]]'. – Szabolcs
@Szabolcs, no lo sabía. Entonces, la respuesta es simplemente que 'Sequence' se expande después de que se ha configurado el estilo. Agregaría eso a su respuesta, ya que sugiere bastante claramente lo que está sucediendo. – rcollyer