2017-03-31 25 views
2

我在理解Mathematica中的尖锐标志时遇到了一些问题。我将# &理解为变量的占位符。但是在下面的代码中#1#2怎么理解?夏普标志在这个Mathematica分割函数中的含义

x = {0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1}; 
Split[x, #1 =!= 0 && #2 =!= 0 &] 

什么是#1#2这里?这些线的输出是

{{0}, {1, 1, 1}, {0}, {0}, {1, 1, 1}, {0}, {0}, {1}} 
+0

插槽术语https://reference.wolfram.com/language/ref/Slot.html – agentp

回答

3

Split版本的形式Split[list,test],其中test是一个函数,它变量。所以

#1 =!= 0 && #2 =!= 0 & 

是一个双变量纯函数,其中#1#2是变量名称的简写。


一般而言,Split将采取列表并返回分区为“相同的”元素的连续运行相同的列表。所以,如果你的列表是list={0,0,2,2,3,4,4,5,5,5,7},然后Split[list]产生

{{0,0}, {2,2}, {3}, {4,4}, {5,5,5}, {7}} 

但也许你要定义意味着什么两样东西是“相同的”不同。这就是通用Split[list,test]函数的功能。这里的test函数是一个函数,它接受两个参数,如果它们相同则返回true; test功能是您的测试是否或两件事是相同的。例如,您提供的测试功能

#1 =!= 0 && #2 =!= 0 & 

如果两个元素均为非零值,则返回true。因此,如果Split函数是零运行的元素,或者它们是非运行的运行,那么它们将对这些元素进行分组。另一个例子,假设你想说两个整数是相同的,如果它们具有相同的奇偶性(偶数或奇数)。然后将拆分功能将

Split[list, Mod[#1,2] == Mod[#2,2]] 

这对于列表我定义将返回

{{0,0,2,2}, {3}, {4,4}, {5,5,5,7}} 
+0

谢谢回答。到目前为止,我明白了这一点。但是,你能告诉我这些变量究竟是什么吗?是#1代表每个拆分列表的第一个元素,#2代表最后一个元素? –