这个Mathematica分裂函数中Sharp符号的含义

时间:2017-03-31 21:02:18

标签: wolfram-mathematica pure-function

我在理解Mathematica中的尖锐迹象时遇到了一些问题。我理解# &是变量的占位符。但是,在以下代码中如何理解#1#2

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}}

1 个答案:

答案 0 :(得分: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}}

对于我定义的列表将返回

Response status code does not indicate success: 400 (Bad Request)