小编Mar*_*mpe的帖子

是否有一个函数的名称,它接受一个数据和一个函数列表,并将每个函数应用于最后一个函数的结果?

Clojure的具有宏->,这需要一个数据片和一组函数,所述数据适用于第一功能,然后应用的,为下一个,的结果的结果的是到第三个,等,最后给你回到最后一个申请的结果.

我非常喜欢这个,因为它不必从应用它们的顺序向后编写函数,如下所示:(伪代码跟随)

floor (square.root (x))
Run Code Online (Sandbox Code Playgroud)

您可以按照数据流经它们的顺序编写它们:

-> x (square.root, floor)
Run Code Online (Sandbox Code Playgroud)

我的问题是,在函数式语言中是否有这个函数的标准名称,map,reduce和filter有标准名称吗?Clojure文档将其描述为"通过函数线程化数据",但我在谷歌上找不到任何东西thread.我在Haskell中写了一个简单的版本:

thread :: a -> [(a -> a)] -> a
thread x []     = x
thread x (f:fs) = thread (f x) fs
Run Code Online (Sandbox Code Playgroud)

a -> [(a -> a)] -> a在Hoogle上搜索,但也没有找到任何东西.

在研究这个问题时,我还发现你可以使用Control.ArrowHaskell中的函数组合运算符做一个非常类似的事情,如下所示:

($2) (sin >>> cos >>> tan)
Run Code Online (Sandbox Code Playgroud)

而使用专用的高阶thread函数,你会写:

thread 2 [sin, cos, tan]
Run Code Online (Sandbox Code Playgroud)

是否第一种配方足以满足实际用途?

ocaml haskell functional-programming function clojure

13
推荐指数
2
解决办法
1127
查看次数

将函数应用于3d数组的每个图层,返回一个数组

想象一下,你有一个包含行,列和层的三维数组:

A <- array (1:27, c(3,3,3))
Run Code Online (Sandbox Code Playgroud)

并且假设你有一个函数将矩阵作为输入并返回矩阵作为输出,如t.

如何将该函数应用于数组的每一层,返回与第一层相同大小的另一个数组?

我觉得我应该能够以apply某种方式做到这一点,但我做不到.

奖金问题(如果你回答这个问题,我将非常感激):这样做是否更快,或者为每个层矩阵和lapply函数制作一个列表?

-

编辑:请不要认为这个问题得到了回答 - 下面的答案没有回答这个问题.

r

10
推荐指数
1
解决办法
3812
查看次数

Haskell中的随机模拟教程

我想使用Haskell进行随机模拟,但我不知道如何.我读过Hutton的"Haskell编程",我很乐意编写确定性函数程序.但是,我不知道如何开始编写R或python等命令式语言中易于使用的随机模拟.是否有关于此的教程或入门,我可以阅读,或者任何人都可以提供一些入门提示?

simulation haskell stochastic-process stochastic

4
推荐指数
1
解决办法
786
查看次数

是否可以编写一个采用map,reduce或filter的函数并返回它们的"函数化"版本?

请原谅我缺乏适当的术语 - 我对--morphisms等一无所知,但我觉得我试图表达的概念可以通过某种术语来描述.

映射,缩小和过滤,经典的高阶函数,都具有获取函数f和数据列表xs以及f对所有数据执行某些操作的一般结构xs.现在,他们每个人,我能想象一个"functionised"版本- mapf给他们打电话,reducef和filterf -这不是需要一个数据块x和功能的列表fs并执行每个功能fs的数据x.具体来说,mapf会返回一个列表f1(x), f2(x), ...,reducef会给你f3 (f2 (f1 (x)))或者f1 (f2 (f3 (x)))(取决于它是左还是右),filterf会测试每个是否f1(x), f2(x), ...为真,只返回fs那些.

我的问题是:是否可以编写一个通用函数,functionise它将map,reduce或filter作为参数并生成相应的mapf,reducef或filterf函数?(当然,优雅的方式不仅仅是一系列的案例表达.)

我不介意使用什么编程语言; 在我自己的实验中,我一直在使用Haskell,而导致我这个问题的原因是我注意到所有三个函数都可以用非常类似的方式定义:

rev = \x y -> y x

mapf :: a -> [a -> b] -> [b]
mapf x fs = map (rev x) fs

reducef :: a -> [a -> a] …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming

3
推荐指数
2
解决办法
405
查看次数