问题标签 [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 - 函数在参数后编写函数
我不喜欢在haskell中从右到左阅读函数的顺序。为了解决这个问题,我添加了一个有用的运算符。
我想我可以在这里找到一个类似的内置运算符。像绑定运算符 (>>=)。但是绑定运算符的工作方式不同,或者确切地说我不明白它是如何工作的。它似乎使用 concat 映射。但为什么?
我要改进该操作员的下一点是让他调用一次。例如:
我尝试使用(>>>) a = a
and来实现(>>>) a fun = (>>>) (fun a)
,但似乎这种重载是不可能的。澄清一下,我专注于函数的学习,但对 monads、types 和 classes 仍然一无所知。
所以我的问题是:内置运算符或正确使用绑定运算符。
ruby - 如何将 Ruby 方法变成一个块?
有没有办法简化下面的代码?
filenames 是文件名(字符串)的列表,例如 ["foo.txt", "bar.c", "baz.yaml"]
有什么办法可以将“File.size”变成 proc 或 block?对于现有对象的方法,我可以做&:method
. 模块级方法有类似的东西吗?
haskell - 表达式 str ab = ((.).(.)) (0 -) (+) 1 2
您能否向我解释以下表达式的工作原理:
我已经检查过了,GHCi 说是这样,-3
但我不明白为什么。
我还检查了以下内容:
但这对我没有帮助。
任何想法?
javascript - 这是javascript中功能镜头的一个地方吗?
玩弄无点风格的javascript 以获得乐趣。
假设我正在编写视频游戏暗黑破坏神,并且我正在使用复杂的嵌套类型对敌人建模,但更深更复杂:
所以我有一个我所有敌人的清单。我想对一定范围内的所有敌人造成伤害
这当然不会进行类型检查——我的组合器采用原语,所以我需要映射和过滤“下一个级别”。我不想掩盖过滤器/映射业务逻辑管道。我知道镜头可以帮助我,但可以说我在浏览器中,因为这对于可变结构来说当然是微不足道的。我该怎么做?
clojure - Clojure 中 partial 的简洁语法
前段时间学习 Haskell,我爱上了 pointfree 表示法和特别方便的偏函数应用程序 - 只需提供你知道的 args。在 Clojure 中,我一直partial
都有。我认为为部分阅读器提供特殊的语法会很高兴。
看示例代码:
这太好了!有这样的事情吗?是否有可能定义自定义阅读器宏?
haskell - 简化异或字符串
我已经将以下函数写入xor
两个字符串,但觉得应该可以更简单地编写:
似乎您至少应该不能拥有第一个map
,但我无法使用该组合chr . xor
进行压缩。
是否存在一些有用的身份/公式涉及zipWith
和map
?
我是Haskell的新手,所以如果有一个没有太多无点魔法的简化,很高兴看到:)
haskell - Haskell currying 在最后删除参数变量
我是一个尝试学习haskell的新手,我试图在其他论坛中搜索类似的东西,但找不到类似的问题。
运行良好
但是当我最后删除 x 时,它会出错
错误说:
无法弄清楚我在这里缺少什么。
免责声明:这不是作业问题
haskell - 涉及函数组合的常见模式 (\ab -> f (ga) (gb))
f 和 g 的组成看起来像
是我在代码中经常发现的一种模式。它类似于一元函数组合,只是f
二进制,我想g
在两个参数传递给f
.
当我要求 lambdabot 将其转换为无点形式时,我得到了奇怪的咒语
我宁愿在我的代码中没有它,所以我最终只是明确地写出模式。
是否有一种普遍接受的方式来为这种情况编写组合器?还是我很奇怪地发现自己经常处于这种情况?
我现在没有一个实际的例子来说明我什么时候使用它,因为我从来没有想过在我需要它的时候在这里问,但是可以想象用它非常巧妙地编写欧几里得距离公式,就像这样:
f# - 这可以用无点风格表达吗?
给定以下表达式来对数字的 IEnumerable 求和:
是否有可能消除争论——像这样?
我从 F# 编译器 (FS0030) 中得到一个错误,我似乎记得曾经看过一些关于“eta 转换”的内容,但不幸的是,我对 lambda calc 的了解太有限,无法理解 eta 转换是如何涉及的。
可以像版本 b 中那样消除论点吗?
有人可以向我指出可以解释 eta 转换以及它将如何在这段特定代码中发挥作用的文献吗?
FS0030:
标准输入(1,5):错误 FS0030:值限制。值 'sum' 已被推断为具有泛型类型 val sum : ('_a -> int) when '_a :> seq 将参数明确地传递给 'sum' 或者,如果您不打算将其设为泛型,添加类型注释。
haskell - `ap zip tail` 表达式是如何工作的
我想知道如何f x = zip x (tail x)
免费写。所以我使用了 pointfree 程序,结果是f = ap zip tail
. ap
作为 Control.Monad 的一个函数
我不明白无点定义是如何工作的。我希望我能从类型的角度来理解它。
通过查看表达式ap zip tail
,我认为 zip 是 的第一个参数,ap
而 tail 是 的第二个参数ap
。
但这是不可能的,因为 和 的类型zip
与函数所需tail
的完全不同。ap
即使考虑到列表是一种单子。