我正在阅读论文关于折叠的普遍性和表现力的教程,并且我坚持关于生成元组的部分.在展示了如何dropWhile无法根据折叠定义正常定义之后,dropWhile证明了使用元组定义的示例:
dropWhile :: (a -> Bool) -> [a] -> [a]
dropWhile p = fst . (dropWhilePair p)
dropWhilePair :: (a -> Bool) -> [a] -> ([a], [a])
dropWhilePair p = foldr f v
where
f x (ys,xs) = (if p x then ys else x : xs, x : xs)
v = ([], [])
Run Code Online (Sandbox Code Playgroud)
该文件指出:
实际上,这个结果是一个通用定理的实例(Meertens,1992),它指出通过将所需结果与参数列表配对而定义的有限列表上的任何函数总是可以用折叠重新定义,尽管并不总是在一种不利用函数的原始(可能是递归)定义的方法.
我看了Meerten的论文,但没有背景(类别理论?类型理论?),并没有找到如何证明这一点.
有一个相对简单的"证据"为什么会这样?或者只是一个简单的解释,为什么我们可以在折叠方面重新定义有限列表上的所有函数,如果我们将结果与原始列表配对.
当使用re的re.sub()部分为python时,如果我没有弄错,可以使用一个函数作为sub.据我所知,它将匹配传递给传递的任何函数,例如:
r = re.compile(r'([A-Za-z]')
r.sub(function,string)
Run Code Online (Sandbox Code Playgroud)
除了使用调用方法的lambda之外,还有更聪明的方法让它传递给第二个arg吗?
r.sub(lambda x: function(x,arg),string)
Run Code Online (Sandbox Code Playgroud) 我在这种格式的数据框中有数据:
grp1 grp2 grp3 grp4 result
1 0 1 0 0 1
2 1 0 0 0 0
3 0 0 0 1 1
4 0 0 0 1 1
5 1 0 0 0 0
6 0 1 0 0 1
.
.
.
Run Code Online (Sandbox Code Playgroud)
哪个可以生成
set.seed(13)
groups <- c("grp1", "grp2", "grp3", "grp4", "result")
# Randomly assign each to group and a result
x <- do.call(rbind, lapply(1:50, function(x) c(sample(c(1,0,0,0), 4), sample(0:1, 1))))
df <- data.frame(x)
colnames(df) <- groups
Run Code Online (Sandbox Code Playgroud)
我的目标是将数据格式化为:
group …Run Code Online (Sandbox Code Playgroud)