Где находится DropWhile в Mathematica? - PullRequest
9 голосов
/ 07 апреля 2011

Mathematica 6 добавил TakeWhile, который имеет синтаксис:

TakeWhile [ список , крит ] дает элементы e i с начала списка , продолжающиеся до тех пор, пока crit [e i ] Правда.

Однако соответствующей функции DropWhile нет. Можно создать DropWhile, используя LengthWhile и Drop, но кажется, что вам не рекомендуется использовать DropWhile. Почему это?

Чтобы уточнить, я не прошу способ реализовать эту функцию. Скорее: почему его еще нет? Мне кажется, что для его отсутствия должна быть какая-то иная причина, кроме недосмотра, иначе это уже было бы исправлено. Есть ли в DropWhile что-то неэффективное, нежелательное или лишнее?


Кажется, есть некоторая двусмысленность относительно функции DropWhile, так что вот пример:

DropWhile = Drop[#, LengthWhile[#, #2]] &;

DropWhile[{1,2,3,4,5}, # <= 3 &]
Out= {4, 5}

Ответы [ 2 ]

7 голосов
/ 07 апреля 2011

Просто слепое предположение.

Существует множество операций со списком лотов, которые могут принимать критерии при .Например:

Total..While  
Accumulate..While  
Mean..While  
Map..While  
Etc..While

Их не сложно построить.

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

3 голосов
/ 08 апреля 2011

Вездесущие списки в Mathematica - это векторы фиксированной длины, а когда они имеют номера машин, это упакованный массив.

Таким образом, естественные функции для рекурсивно определенного связанного списка (например, в Lisp или Haskell) не являются основными инструментами в Mathematica.

Так что я склонен думать, что это объясняет, почему Вольфрам не заполнил свой список функций манипулирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...