- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个功能
rulesApply :: [PhrasePair] -> Phrase -> Phrase
rulesApply pp = try (transformationsApply "*" reflect pp )
我想学习如何让它成为 pointfree。
try :: (a -> Maybe a) -> a -> a
try f x = maybe x id (f x)
transformationsApply :: Eq a => a -> ([a] -> [a]) -> ([([a], [a])] -> ([a] -> Maybe [a]))
transformationsApply wc f pfPair list = foldr1 orElse (map (transformationApply wc f list) pfPair)
rulesApply pp = try (transformationsApply "*" reflect pp )
(transformationsApply "*"reflect ) pp
具有类型 Eq a => ([([a], [a])] -> ([a] -> Maybe [a ]))
我们看到了
try :: (a -> Maybe a) -> a -> a
所以 try 将函数 (a -> Maybe a)
作为参数。我们看到 (transformationsApply "*"reflect ) pp
的返回类型是 ([a] -> Maybe [a]))
所以我们应该可以写。
rulesApply pp = try . (transformationsApply "*" reflect) pp
但这会导致编译错误。
最佳答案
当你有类似的东西时
\x -> f (g x)
你可以把它变成
f . g
在这种情况下,你有
s x = f (g x )
rulesApply pp = try (transformationsApply "*" reflect pp )
可以将其转换(通过将参数移到等式的另一边)
s = \x -> f (g x )
rulesApply = \pp -> try (transformationsApply "*" reflect pp )
反过来,根据我们的规则,
s = f . g
rulesApply = try . transformationsApply "*" reflect
关于haskell - Haskell 中的 Pointfree 风格编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20009293/
我正在尝试移植以下 Haskell 代码 (http://codepad.org/MMydRCxo) foo :: Int -> Int -> Int -> Maybe Bool foo a b c
好吧,事实证明我在我的程序代码中定义了这个函数: st_zipOp :: (a -> a -> a) -> Stream a -> Stream a -> Stream a st_zipOp f xs
我有一个函数对象: const src = { foo: str => str.toUpperCase(), bar: str => str + str, baz: str => str.
下面的函数createTuple可以表示为pointfree吗? let createTuple = fun v -> (v, v*2) createTuple 2 |> printfn "%A" /
我想编写一个 Haskell 函数,它返回一个附加到自身计数时间的列表(如 Python 中的 lst * count)。 我的第一次尝试是: self_append_n :: Int -> [a]
在 Haskell 中,我定义了一个乘法表生成器函数,如下所示: multTable :: [[Int]] multTable=map (\b -> map (b*) [1..12]) [1..12]
Learn You a Haskell使用以下 Prob 类型讨论“制作 Monad”: import Data.Ratio newtype Prob a = Prob { getProb :: [(
当参数应该散布在柯里化(Currying)组合函数中时,我试图弄清楚是否存在编写无点组合函数的模式 即(使用 Ramda): add_1_and_multiply = (add, mul) => R.
我想知道我是否可以像这样使用 Swift/RxSwift 来使用 pointfree-style: class MyClass { private let ageService: Observa
我一直在重用 lambda 表达式,例如 \x -> (f x, g x) 我将相同的输入应用于两个函数并将结果封装成一对。我可以写一个函数来捕捉这个 combine :: (a -> b) -> (
我有这个功能 rulesApply :: [PhrasePair] -> Phrase -> Phrase rulesApply pp = try (transformationsApply "*"
pointfree 函数可以返回一个元组吗?例如,以下是否可以用 pointfree 风格编写(其中 f1、f2 和 f3 已被定义): (\t -> (f1 t, f2 t, f3 t)) 在这种情
我想定义一个函数来计算列表中满足给定谓词的元素数量: number_of_elements :: (a -> Bool) -> [a] -> Int number_of_elements f
我怎样才能使以下函数成为 pointfree(使用 Ramda)? const prefixAll = R.curry((prefix, list) => R.map(R.concat(prefix)
可以this完成 pointfree 了吗? var joinByKey = R.curry(function(key, model){ return R.assoc(key, R.join(
我有一些谓词,例如: is_divisible_by_13 = lambda i: i % 13 == 0 is_palindrome = lambda x: str(x) == str(x)[::-
我正在以无点风格查看 Haskell 中的一些函数。在尝试重写一些简单的示例时,我卡在了这个上 func a b c d = sum $ take 2 $ sort [a, b, c, d] 如何将参
我在 ramda.js 中编写 pointfree 风格的函数时遇到问题,想知道是否有人可以帮助我。 getEnv 函数读取环境变量,如果找不到,则将其记录到控制台。 这是我的代码 const env
当我尝试以 pointfree 风格编写 JavaScript 时,我发现如果强制每个函数都采用这种风格,有时会失去其可读性。例如: import R from 'ramda' const ceil
鉴于下面的功能,如何将其转换为无点样式?使用 Ramda 的 prop 会很好和 path并跳过数据参数,但我无法弄清楚正确的语法。 const mapToOtherFormat = (data) =
我是一名优秀的程序员,十分优秀!