function-composition相关内容
有没有更好的方法来表达 (\(a, b) -> a b -> c) ->(a, b) ->C 在这种情况下,它是 uncurry (
..
我有一个输入值 val 和一个按顺序应用的函数列表: funcs = [f1, f2, f3, ..., fn] 如何优雅地应用而不是写作 fn( ... (f3(f2(f1(val))) ... ) 并且也不使用 for 循环: tmp = val对于函数中的 f:tmp = f(tmp) 感谢 Martijn 的精彩回答.我发现了一些阅读:https://mathieularose
..
我有一个函数数组,我正在尝试生成一个函数,该函数由数组中元素的组合组成.我的方法是: def compose(list):如果 len(list) == 1:返回 lambda x:list[0](x)list.reverse()最终=拉姆达x:x对于列表中的 f:最终=拉姆达x:f(最终(x))返回决赛 此方法似乎不起作用,将不胜感激. (我正在颠倒列表,因为这是我希望函数的组合顺序)
..
我正在尝试编写一个可变参数函数组合函数.这基本上是 (.) ,除了第二个参数函数是可变参数.这应该允许以下表达式: map even .zipWith (+) 或者只是 map even .压缩包 目前,如果我添加 IncoherentInstances 并且需要第一个参数函数的非多态实例,我所达到的效果. {-# LANGUAGE FlexibleInstances, Overlapp
..
我想知道是否可以使用带有多个参数的函数进行函数组合.我希望能够做这样的事情 x = (+3).(*) 设置 x 等于一个函数,将两个数字的乘积加三. 解决方案 有多种方法可以做到,但都有些别扭. ((+3).) .(*)≡ fmap (+3) .(*)≡ 咖喱 $ (+3) .非咖喱 (*)≡ \l r ->l*r + 3 哦,等等,这是签名,还有一个紧凑的定义,猜猜它叫什么...
..
我试图了解这个 Haskell 代码中的点运算符在做什么: sumEuler = sum .(地图欧拉).列表 整个源代码如下. 我的理解 点运算符以两个函数sum和map euler的结果和mkList的结果作为输入. 但是,sum 不是函数,而是函数的参数,对吧?那么这里发生了什么? 另外,(map euler) 在做什么? 代码 mkList :: Int
..
普通函数组合是这样的 (.) :: (b -> c) ->(a -> b) ->->C 我认为这应该推广到以下类型: (.) :: (c -> d) ->(a -> b -> c) ->->b->d 一个具体的例子:计算差分平方.我们可以写diffsq ab = (a - b) ^ 2,但感觉我应该能够编写(-)和(^2) 写类似 diffsq = (^2) 的东西.(-). 我当然
..
我一直在阅读Real World Haskell,并且接近尾声,但是风格问题一直困扰着我与(.) 和($) 运算符. 当你编写一个由其他函数组成的函数时,你可以这样写: f = g .H 但是当你在这些函数的末尾应用一些东西时,我是这样写的: k = a $ b $ c $ 值 但是这本书会这样写: k = a .乙.c$值 现在,在我看来,它们在功能上是等效的,它们在我眼中的作
..
我见过很多函数都是按照 (f .) 模式定义的.g.例如: countWhere = (length .) .筛选重复 = (concat .) .复制concatMap = (concat .) .地图 这是什么意思? 解决方案 点运算符(即 (.))是 函数组合 运算符.其定义如下: infixr 9 .(.) :: (b -> c) ->(a -> b) ->->CF .g =
..
为什么要进行类型检查: runST $ return $ True 虽然以下没有: runST .返回 $ 真 GHCI 抱怨: 无法匹配预期的类型 `forall s.ST s c0'实际类型为‘m0 a0’预期类型:a0 ->福尔 s.ST C0实际类型:a0 ->m0 a0在`(.)'的第二个参数中,即`return'在表达式中: runST .返回 解决方案 简短的回答是类型
..
点(.)和美元符号($)有什么区别? 据我所知,它们都是不需要使用括号的语法糖. 解决方案 $ 运算符用于避免括号.出现在它之后的任何内容都将优先于之前出现的任何内容. 例如,假设您有一行内容: putStrLn (显示 (1 + 1)) 如果你想去掉那些括号,下面的任何一行也可以做同样的事情: putStrLn (显示 $1 + 1)putStrLn $ 显示 (1 +
..
我想创建一个函数链,它将作为管道/流/组合函数的输入. 如果没有将类型字面扩展到选定的深度,这是否可能,这通常是这样处理的?查看 lodash 的流程. 我想实现链中数据流的类型检查.- 函数的参数是前一个函数的结果- 第一个参数是模板参数- 最后返回的是模板参数 type Chain= [] |[(参数:输入)=>出] |[(参数:输入)=>Tmp1, (i: Tmp1) =>Tm
..
我正在阅读 Joshua Suereth 的 «Scala in Depth»,这本书是我为了作者明确确立的能力而购买的.我在第 3 页,在经历了一堆拼写错误和不连贯的格式(好吧,我已经可以容忍这些错误)之后,我偶然发现了以下示例,该示例是关于解决一个非常简单的场景的函数式方法. 特质猫性状 鸟特性捕捉性状 FullTummydef catch(hunter: Cat, prey: Bird):
..
我想测量方法的计算时间. 一个不错的方法是 (您如何对 JavaScript 代码进行性能测试?) 与 console.time('Function #1'); 和 console.timeEnd('Function #1'); 我的想法是在生命周期方法上添加这些控制台输出.在这种情况下,使用 SAPUI5 之类的 createContent:funtion(){}; 方法. 这
..
也许你们中的一些人了解 AOP,在某些语言中使用 AOP 可以使您能够在方法执行之后、之前或期间注入代码等. 我想要的是在 Javascript 中应用相同的内容,我目前正在开发一个包含 300 多个 ajax 调用的大型应用程序,每次我需要对它们的 catch 语句进行一些更改时,我都必须修改一个接一个,很乏味. 我想做的是: functionName.before("try {"
..
我是 Haskell 的新手.我试图了解类型的组合是如何工作的. (.) :: (b -> c) ->(a -> b) ->->Cfmap :: 函子 f =>(x -> y) ->f x ->f y地图.fmap :: (Functor f1, Functor f2) =>(x -> y) ->f1 (f2 x) ->f1 (f2 y) 我对上述类型信息的理解如下. 1. (x -> y)
..
为什么 andThen 只存在于 Scala 中的单参数函数? 以下代码有效: val double = (x: Int) =>×*2val timesFour = 双倍然后双倍 但是为什么没有用于多参数函数的 andThen 方法? val 乘法 = (x: Int, y: Int) =>x * yval multiplyAndDouble = 乘以然后加倍:10:
..
有点类似于堆栈溢出问题组合和然后方法,我一直在研究 Twitter 的 Scala School 教程并很快遇到了评论者遇到的相同问题(这很棒,因为我上床睡觉以为我的问题已解决). 在教程中,它定义了两个方法: def addUmm(x: String) = x + " umm"def addAhem(x: String) = x + "啊哼" 而在较新版本的 Scala 中,您不能像这
..
我遇到了andThen,但没有正确理解. 为了进一步研究,我阅读了 Function1.andThen 文档 def andThen[A](g: (R) ⇒ A): (T1) ⇒ A mm 是一个 MultiMap 实例. scala>毫米res29: scala.collection.mutable.HashMap[Int,scala.collection.mutable.Set[S
..
只是想知道是否有一个语法快捷方式来获取两个过程并将它们连接起来,以便将一个的输出传递给另一个,相当于: a = ->(x) { x + 1 }b = ->(x) { x * 10 }c = ->(x) { b.( a.( x ) ) } 这在处理诸如 method(:abc).to_proc 和 :xyz.to_proc 之类的事情时会派上用场 解决方案 更多的糖,在生产代码中并不真正推
..