Получение всех листьев из выражения

Я хотел бы получить Список (в идеале набор - отбрасывая повторение - но, предполагая, что нет прямого способа сделать это, я просто использую Union ) листьев из данного выражения.

Например, выражение

ArcTan[(-1 + 2*x)/Sqrt[3]]/Sqrt[3]

имеет LeafCount из 18:

  • -1 (3)
  • 2 (3 )
  • 3 (2)
  • x
  • ArcTan
  • Plus
  • Power (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]
(* ... *)

] но я чувствую, что должен быть способ получше.

6
задан Charles 18 August 2011 в 20:35
поделиться