2017-03-31 39 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代表最後一個元素? –