问题标签 [pointfree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
f# - 无点函数中的异常处理
我遇到了一个看似微不足道的问题:如果函数中的异常是以无点方式编写的,我将无法处理它。
考虑这两个函数:
虽然这两个功能看起来相同,但它们有不同的类型:
显然,divide2
甚至没有尝试处理异常。它只是返回一个运算符。
我该怎么做才能以divide2
适当的方式处理异常(除非专门声明其参数)?
haskell - Pointfree(或库)函数,用于将两个函数应用于单个输入
我一直在重用 lambda 表达式,例如
我将相同的输入应用于两个函数并将结果封装成一对。我可以写一个函数来捕捉这个
现在上面的 lambda 表达式只是combine f g
. 我有两个问题。
- 我很想知道是否有一个标准库函数可以做到这一点,而我只是找不到。
- 出于好奇,我想以无点风格重写此功能,但我遇到了很多麻烦。
performance - Pointfree 版本使性能恶化
好吧,事实证明我在我的程序代码中定义了这个函数:
它做它看起来做的事情。它使用 type 的内部运算符压缩(多次应用运算符,是的)两个 type 元素Stream a
,这是一个类似列表的类型a
。定义非常简单。
一旦我以这种方式定义了函数,我就尝试了另一个版本:
据我所知,这与上面的定义完全相同。它只是先前定义的无点版本。
但是,我想检查是否有任何性能变化,我发现,确实,无点版本使程序运行得稍差(无论是在内存上还是在时间上)。
为什么会这样?如果有必要,我可以编写一个重现此行为的测试程序。
如果这有所作为,我正在编译-O2
。
简单的测试用例
我编写了以下代码,试图重现上述行为。这次我使用了列表,性能的变化不太明显,但仍然存在。这是代码:
使用opEvery
(显式参数版本)的分析结果:
分析结果使用opEvery'
(无点版本):
但是,我希望这两个版本是等效的(在所有意义上)。
haskell - Haskell:为什么 ((.).(.)) fg 等于 f 。gx?
你能解释一下表达式 ((.).(.)) 的含义吗?据我所知 (.) 的类型为 (b -> c) -> (a -> b) -> a -> c。
haskell - 在 Haskell 中,当你只传递一个列表时,map 函数意味着什么?
在我要调试的 Haskell 项目中,代码中有一些实例map
仅与一个参数一起使用 - 一个列表 - 被传递。
例如
和
在这种情况下是什么map
意思/做什么?
haskell - 我如何理解“(.) . (.)”?
我相信我对fmap . fmap
Functor 有所了解,但在功能上,这几个月来一直让我头疼。
我已经看到您可以只应用(.)
to的定义(.) . (.)
,但我忘记了如何做到这一点。
当我自己尝试时,结果总是错误的:
如果“仅应用定义”是这样做的唯一方法,那么有人是怎么想出的(.) . (.)
?
我必须缺少一些更深层次的理解或直觉。
haskell - 请解释一下 (forM_ [stdout, stderr] .flip hPutStrLn) :: String -> IO ()
我无法理解这个 Haskell 表达式的工作原理:
该. flip hPutStrLn
部分到底在做什么?类型签名看起来很复杂:
(.)
计算表达式时,运算符的左操作数和右操作数是什么?
提出我的问题的另一种方法是,顶部的表达式的左侧部分如何以这样的类型签名结束:
haskell - Haskell 中的无点函数
如何定义这个无点?
按预期工作。最合乎逻辑的似乎只是放弃m
这样的:
可以在 ghci 中定义,但是用它来调用它argmax [1,3,4,5,6,1]
给了我
我认为这与类型有关:
对于点版本:
对于无积分版本:
这是 ghci 诡异还是我做错了什么?
syntax - 无点:对括号放在哪里感到困惑
这是错误的,但我如何让它理解仍然需要提供论点?参数应该是类型char list
,即需要应用到它的第一个函数是(List.map (String.make 1))
,然后将它传递给String.concat ""
。我想我已经尝试了所有我能想到的括号组合......到目前为止没有任何乐趣。
帮助?
我还想我可以这样做:
但只是想确保没有更好的方法。
haskell - 将递归函数重写为管道函数组合
我正在写作业(CIS194 Haskell 课程)。
我必须将以下递归函数重写为管道函数(没有明显的递归)。
我的第一次尝试是在这里:
这是一个正常的解决方案还是很奇怪?
我怎样才能fun2
更好地重写?
takeWhile
现在我尝试使用和编写版本iterate
我的第二次尝试:
我until
现在版本有点问题。