追踪表达遍历
Echo 和 EchoFunction 可以报告在模式匹配过程中表达式元素被依次访问的顺序.
观察 Cases 访问表达式第一层部分的顺序.
In[1]:=
![Click for copyable input](assets.zh/follow-expression-traversals/In_24.png)
Cases[{a, 2, {7, {1, b}}, 0}, x_ /; NumberQ[Echo[x]]]
»
![](assets.zh/follow-expression-traversals/O_21.png)
»
![](assets.zh/follow-expression-traversals/O_22.png)
»
![](assets.zh/follow-expression-traversals/O_23.png)
»
![](assets.zh/follow-expression-traversals/O_24.png)
Out[1]=
![](assets.zh/follow-expression-traversals/O_25.png)
访问相同表达式的所有层.
In[2]:=
![Click for copyable input](assets.zh/follow-expression-traversals/In_25.png)
Cases[{a, 2, {7, {1, b}}, 0}, x_ /; NumberQ[Echo[x]], All]
»
![](assets.zh/follow-expression-traversals/O_26.png)
»
![](assets.zh/follow-expression-traversals/O_27.png)
»
![](assets.zh/follow-expression-traversals/O_28.png)
»
![](assets.zh/follow-expression-traversals/O_29.png)
»
![](assets.zh/follow-expression-traversals/O_30.png)
»
![](assets.zh/follow-expression-traversals/O_31.png)
»
![](assets.zh/follow-expression-traversals/O_32.png)
»
![](assets.zh/follow-expression-traversals/O_33.png)
»
![](assets.zh/follow-expression-traversals/O_34.png)
Out[2]=
![](assets.zh/follow-expression-traversals/O_35.png)