问题标签 [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.
haskell - 帮助理解无点代码
在玩Pointfree时,我看到了一段我似乎无法理解的代码。
我的主要问题是我不明白join
这里的工作方式。我知道它“删除”了一层单子包装(m (m a)
to m a
)。我认为它归结为类似的东西[1..10] >>= (\x -> [x * x])
,但我真的不明白“额外层”是如何引入的。我明白了join x = x >>= id
,但是我仍然坚持如何“复制”每个值以便(*)
获得两个参数。这已经困扰了我大约半个小时了,我主要是对自己感到恼火,因为我觉得我拥有所有的拼图,但似乎无法将它们组合在一起......
PS 别担心,我不会真正使用这个无点版本,这纯粹是出于好奇,也是为了更好地理解 Haskell。
scala - Scala 中无点样式的案例
这对于这里的 FP 行家来说似乎真的很明显,但是 Scala 中的无点风格有什么好处呢?在这个主题上真正卖给我的是一个插图,它显示了无点风格在某些方面(例如性能、优雅、可扩展性、可维护性)比用非无点风格解决相同问题的代码要好得多。
haskell - Haskell中函数组合的困惑
考虑以下 ghci 中的函数定义。
在哪里, 。代表两个函数的组合(右结合)。这个我可以打电话
它给了我想要的结果。显然,它将列表 [3.14, 3.14] 传递给函数“sum”,并将其“结果”传递给 cos 等等。但是,如果我在口译员中这样做
或者
然后我遇到了麻烦。将其修改为以下内容给了我想要的结果。
或者
(.) 的类型表明以下形式不应该有问题,因为 'sum y' 也是一个函数(不是吗?毕竟在 Haskell 中一切都是函数?)
更有趣的是,我可以使用两个(或多个)参数(考虑将列表 [3.14, 3.14] 作为两个参数 x 和 y 传递),我必须编写以下内容
HaskellWiki 上有一些关于这种形式的讨论,他们称之为“PointFree”形式http://www.haskell.org/haskellwiki/Pointfree。通过阅读这篇文章,我怀疑这种形式不同于两个 lambda 表达式的组合。当我尝试画一条分隔这两种样式的线时,我感到困惑。
f# - 在函数式编程中以无点风格定义函数。有什么缺点/优点?
每次我写一些形式的东西
我最终问自己我是否会写得更好
反而。与第二种形式相比,以第一种形式编写它有什么优势吗?
另外,您将如何调用第一种形式和第二种形式的函数定义?
haskell - 如何使交互无点?
在上面的代码中,我如何以无点样式编写交互函数。
haskell - 将两个一元值成对并返回
我正在玩 Parsec,我想将两个解析器组合成一个,并将结果放在一对中,然后将另一个函数提供给它以对解析结果进行操作以编写如下内容:
所以我写了这个:
和
有没有类似于 (<&>) 的东西已经在某处实现了?或者这可以写成无意义的吗?我试过fmap (,)
了,但似乎很难匹配类型。
debugging - 为什么不进行类型检查?
compress xs@(_:_:_) = (ifte <$> ((==) <$> head <*> head.tail) <$> ((compress.).(:) <$> head <*> tail.tail) <*> ((:) <$> head <*> compress.tail) ) xs
导致类型错误,但我不明白为什么。它应该相当于
compress xs@(_:_:_) = (ifte (((==) <$> head <*> head.tail) xs) (((compress.).(:) <$> head <*> tail.tail) xs) (((:) <$> head <*> compress.tail) xs))
,这不是。
注意ifte = (\ x y z -> if x then y else z)
:<$>
和<*>
来自Control.Applicative
。
编辑:错误是:
我在尝试编写九十九个 Haskell 问题的第 8 题的无点解决方案时遇到了这个问题。我试图通过修改我写的有意义的解决方案来做到这一点,这是
haskell - 无点样式并使用 $
如何结合 using$
和 point-free 风格?
一个明显的例子是以下效用函数:
只写concat $ replicate
会产生错误,同样你也不能写concat . replicate
,因为concat
需要一个值而不是函数。
那么如何将上述函数变成无点样式呢?
haskell - 无点风格的简单 Haskell 函数
我试图了解如何在 Haskell 中将函数转换为无点表示法。我看到了这个例子,但它比我要找的更复杂。我觉得我理解它背后的逻辑,但是当我尝试在代码中执行一些简单的示例时,我遇到了编译错误。我想尝试以无点风格编写此函数:
f x = 5 + 8/x
我重新排列为f x = (+) 5 $ (/) 8 x
所以,我认为它可能是这样的:
但是当我在 ghci 中运行它时,我会收到以下消息:
我不明白“没有实例...”消息。我需要做什么才能以无点样式编写此函数?
haskell - Haskell中无点样式的元素数量
我想定义一个函数来计算列表中满足给定谓词的元素数量:
例如:
应该返回2。
我们可以写得更短:
没有f参数可以写吗?