Я хотел бы получить List
(в идеале набор - отбрасывание повторений - но, предполагая, что прямого способа сделать это не будет, я просто использую Union
) листьев из данного выражения.
Например, выражение
ArcTan[(-1 + 2*x)/Sqrt[3]]/Sqrt[3]
имеет LeafCount
из 18:
- -1 (3)
- 2 (3)
- 3 (2)
- x
- ArcTan
- Plus
- Мощность (2)
- Rational (2)
- Times (3)
, поэтому я хотел бы что-то вроде
{-1, 2, 3, x, ArcTan, Plus, Power, Rational, Times}
На самом деле, я действительно просто хочу, чтобы функции так
{ArcTan, Plus, Power, Rational, Times}
было бы идеально, но, вероятно, есть какой-то не слишком сложный способ отфильтровать их, когда они у меня есть.
Мне повезло с
H[s_] := If[LeafCount[s] == 1, s, Head[s]]
H /@ Level[expr, 1, Heads -> True]
H /@ Level[expr, 2, Heads -> True]
(* ... *)
, но ячувствую, что должен быть лучший способ.