Нужна помощь в обходе списков в тестах условий или шаблонов - PullRequest
3 голосов
/ 02 апреля 2011

Как мы можем использовать условный или шаблонный тест, чтобы наша функция принимала любые символы в качестве входных данных, кроме списков?

1 Ответ

8 голосов
/ 02 апреля 2011

Использование Except:

f[x : Except[_List]] := doSomethingTo[x]

expr /. x : Except[_List] :> doSomethingElseTo[x]

Вы можете комбинировать это с Alternatives (инфиксный оператор |), чтобы исключить несколько вещей:

g[x : Except[_List | _Rational]] := etc[x]

Редактировать: Объединение ответов из комментариев тоже:

ListQ[expr] вернет True, если expr является списком (имеет заголовок List) и False в противном случае. MatchQ[expr, _List] и Head[expr]===List являются эквивалентными способами достижения того же самого.

...