我在理解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}}
答案 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)