2011-04-07 30 views
9

的Mathematica 6加入TakeWhile,其具有语法:DropWhile在Mathematica中在哪里?

TakeWhile [列表] 给出元件Ë列表的开始,继续只要暴击 [e i]是真的。

但是没有相应的“DropWhile”功能。人们可以使用LengthWhileDrop来构建DropWhile,但几乎看起来好像人们不愿意使用DropWhile。为什么是这样?

为了澄清,我没有要求实现此功能的方法。相反:为什么它还不存在?在我看来,除了疏忽之外,必须有其缺席的原因,否则它现在已经得到纠正。 DropWhile有没有效率低下,不可取或多余?


似乎有大约DropWhile的功能有些含糊不清,所以这里有一个例子:

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

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

关于“歧义”。这只是“while”一词的语言模糊性。我们应该遵循在* Mathematica *中的'While'这样的函数中使用的“while”的标准含义。所以你的问题可以改写为'list = {1,2,3,4,5}; [list [[1]] <= 3,list = Drop [list,1]]; list'。我可以看到没有任何含糊之处。 – 2011-04-07 09:35:55

+0

@Alexey,我的编辑是回应一个答案,表明一种方法不符合上述定义。它已被删除。 – 2011-04-07 09:37:52

回答

3

Mathematica中无处不在的列表是固定长度的向量,当它们是机器编号时,它是一个压缩数组。

因此,递归定义链表(例如在Lisp或Haskell中)的自然函数不是Mathematica中的主要工具。

所以我倾向于认为这解释了为什么Wolfram没有填写它的操作函数库。

7

只是一个盲目的猜测。

有很多列表操作可能需要条件。例如:

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

无论如何,它们并不难构造。

我认为那些不包括在内的仅仅是因为“原始”函数的数量已经增长太长了,而且“这是用户经常需要并且难以用良好性能来实现吗?”的标准。在这些情况下普遍存在。

+0

通过这个逻辑,不会'TakeWhile'也不存在,因为它可以由'LengthWhile'构造?在我看来,'Take'和'Drop'成为一对,我相信实现这一点的其他语言既可以同时使用,也可以同时使用。顺便说一下,我认为我喜欢MapWhile的想法。 – 2011-04-07 12:56:30

+1

@Mr。我认为TakeWhile和LengthWhile的存在并不好奇,因为正交性不是WR在功能实现上的主流标准。但是,我们只是在这里咆哮。我只是想补充一点,我不得不让自己的dropWhile不止一次:) – 2011-04-07 13:07:31

+0

我想知道是否可以通过让不同的函数接受另一个表示测试的第二个参数(或任何参数)来控制爆炸被执行。这样它就会使得“Take”等与其条件生成器正交。 – rcollyer 2011-04-08 04:13:53