标签: function-composition

与二元算子的组合?

我想做一些相当简单的事情; 我正在使用带有Data.Map insertWith的运算符(++),它工作正常,但我想消除创建的值中的重复,所以想要用nub组合它.

我试过(nub(++)),(nub $(++)),(nub.(++)),都无济于事,因为(++)的类型与预期的小块类型不匹配( [一个] ).

我当然可以定义一个辅助函数或一个lambda,但我认为可能有一个更清晰的组合.

请提示!

haskell function-composition

8
推荐指数
2
解决办法
762
查看次数

组成一个2参数函数链

所以我有一个类型的两个参数的函数列表 [a -> a -> a]

我想编写一个函数,它将获取列表并将它们组成一个函数链,这些函数在左侧组成长度为+ 1的参数.例如,如果我有[f,g,h]所有类型,[a -> a -> a]我需要编写一个函数,它给出:

chain [f,g,h] = \a b c d -> f ( g ( h a b ) c ) d
Run Code Online (Sandbox Code Playgroud)

如果它有帮助,那么这些函数在它们的参数中是可交换的(即f x y = f y x对所有人而言x y).

我可以在列表理解中做到这一点,因为我知道有问题的函数的数量,它几乎就像定义一样.这是从固定数量的函数到动态数字的延伸,让我难以理解.

这是我到目前为止:

f xs = f' xs
    where
        f' []   = id
        f' (x:xs) = \z -> x (f' xs) z
Run Code Online (Sandbox Code Playgroud)

我认为逻辑是沿着正确的道路,它只是不进行类型检查.

提前致谢!

haskell function-composition

8
推荐指数
1
解决办法
1799
查看次数

折叠.foldr函数组合 - Haskell

所以,我真的在煎我的大脑,试着理解foldl.foldr的成分.这是一个例子:

(foldl.foldr) (+) 1 [[1,2,3],[4,5,6]]
Run Code Online (Sandbox Code Playgroud)

结果是22,但这里到底发生了什么?

对我来说,这就是发生的事情:foldl (+) 1 [6,15].我的疑问与该foldr部分有关.它不应该将1添加到所有子列表中吗?像这样:foldr (+) 1 [1,2,3].在我脑海中,1只添加了一次,是不是?(可能不是,但我想知道如何/为什么!).

我很困惑(也许让所有的困惑,哈哈).谢谢!

haskell fold function-composition

8
推荐指数
2
解决办法
802
查看次数

Haskell:为什么((.).(.))fg等于f.GX?

你能解释一下表达式的含义((.).(.))吗?据我所知(.)有类型(b - > c) - >(a - > b) - > a - > c.

haskell types combinators pointfree function-composition

8
推荐指数
1
解决办法
599
查看次数

如何将两个过程组合成一个?

只是想知道是否有一个语法快捷方式,用于获取两个proc并加入它们,以便将一个的输出传递给另一个,相当于:

a = ->(x) { x + 1 }
b = ->(x) { x * 10 }
c = ->(x) { b.( a.( x ) ) }
Run Code Online (Sandbox Code Playgroud)

有喜欢的东西时,这会派上用场method(:abc).to_proc,并:xyz.to_proc

ruby function-composition

8
推荐指数
1
解决办法
1606
查看次数

用于组合两个函数f和g的Haskell表示法,其中g表示多个参数

我经常发现我想要编写两个函数f和g,但g需要多个参数.Haskell是否提供了一组操作符(我知道我可以自己编写它,但它看起来相当常见,我不想复制已经存在于Haskell中的运算符)

即类似的东西

(.@) = (.)
(.@@) f g x1 x2 = f $ g x1 x2
(.@@@) f g x1 x2 x3 = f $ g x1 x2 x3
(.@@@@) f g x1 x2 x3 x4 = f $ g x1 x2 x3 x4
...
Run Code Online (Sandbox Code Playgroud)

达到一些合理数量的论点

haskell operators currying variadic-functions function-composition

8
推荐指数
2
解决办法
383
查看次数

为什么功能组合需要括号?

假设我想要Text.pack与之合作Text.strip.

:t (.) 生产: (b -> c) -> (a -> b) -> a -> c

:t (Text.pack) 生产: String -> Text

:t (Text.strip) 生产: Text -> Text

因此取代strip(b -> c)给: b = Text c = Text

替换pack(a -> b)得出: a = String b = Text

让我们验证::t strip . pack产生: strip . pack :: String -> Text

好吧,太棒了试试看:

strip.pack " example "

生产:

Couldn't match expected type …
Run Code Online (Sandbox Code Playgroud)

syntax haskell operator-precedence function-composition

8
推荐指数
1
解决办法
193
查看次数

为什么F#中的功能组成比管道慢得多60%?

不可否认,我不确定我是否正确地将苹果与苹果或苹果与梨进行比较.但是我对这种差异的巨大性感到特别惊讶,如果有的话会有更小的差异.

管道通常可以表示为函数组合,反之亦然,我认为编译器也知道,所以我尝试了一个小实验:

// simplified example of some SB helpers:
let inline bcreate() = new StringBuilder(64)
let inline bget (sb: StringBuilder) = sb.ToString()
let inline appendf fmt (sb: StringBuilder) = Printf.kbprintf (fun () -> sb) sb fmt
let inline appends (s: string) (sb: StringBuilder) = sb.Append s
let inline appendi (i: int) (sb: StringBuilder) = sb.Append i
let inline appendb (b: bool) (sb: StringBuilder) = sb.Append b

// test function for composition, putting some garbage data in SB
let …
Run Code Online (Sandbox Code Playgroud)

performance f# piping function-composition

8
推荐指数
2
解决办法
474
查看次数

如何在PureScript中编写函数?

试图(.)用于功能组合,但它不起作用.

import Data.String (length, trim)

trimmedLength :: String -> Int
trimmedLength = length . trim
Run Code Online (Sandbox Code Playgroud)

functional-programming function-composition purescript

8
推荐指数
1
解决办法
454
查看次数

(如何)你能咖喱组合一元函数吗?

我有以下功能:

f: a -> m[b]
g: (b,c) -> m[d]
h: (a,c) -> m[d]
Run Code Online (Sandbox Code Playgroud)

怎样才能h被表示为一个组成fg

使用do/for符号,我们可以h像这样轻松实现:

h: (a,c) => {
 for {
  b <- f(a)
  d <- g(b,c)
 } yield (d)
}
Run Code Online (Sandbox Code Playgroud)

但是,我很好奇我们是否可以这样表达:h = f andThen gwhereandThen像一元组合运算符一样使用。例如:

f: a -> m[b]
g: b -> m[c]
h: a -> m[c] = f andThen g
Run Code Online (Sandbox Code Playgroud)

我假设andThen在像 Haskell(例如 Kliesli >=>)这样的语言中创建这样的函数是可能的。在 Scala 中,我们可以这样写:(Scala 命名中的示例,andThenE因为 …

monads haskell scala currying function-composition

8
推荐指数
1
解决办法
161
查看次数