haskell - 在多参数函数上使用美元符号
问题描述
Prelude> p a b c=1
Prelude> p $ 2 $ 2 $ 5
tons of error......
Prelude> ($$)=($)
Prelude> p $$ 2 $$ 2 $$ 5
1
Prelude>p $$ [2..3] $$ 4 $$ 5
1
Prelude>p $$ [1]++[2..3] $$ 4 $$ 5
tons of error......
Prelude>p $$ [1]++[2..3] $$ [1]++[2..3] $$ 5
of course, tons of error......
问题 1:为什么 ($) 不适用于“p $ 2 $ 2 $ 5”?
问题 2:为什么 ($$) 对“p $$ 2 $$ 2 $$ 5”有效?
问题 3:为什么 ($$) 不适用于“p $$ [1]++[2..3] $$ 4 $$ 5”?
问题4:有没有更优雅的方式正确写出“p $$ [1]++[2..3] $$ [1]++[2..3] $$ 5”?
解决方案
由于它们的固定性规范,答案在于运算符优先级。
($)
优先级为 0 并关联到右侧,可以看出
Prelude> :i ($)
...
infixr 0 $
如果您希望自定义运算符具有您建议的优先级和关联性,则需要将固定性声明添加到代码中:
infixl 0 $$
推荐阅读
- selenium-webdriver - Groovy 在 xpath 中使用单引号传递字符串值 - Katalon
- c - 如果孩子在父母调用 wait() 之前就退出了怎么办?
- c# - 网格视图内的文本框及其值未反映在服务器端
- string - 输出此字符串序列的第 n 遍
- gams-math - 使用带有表数据的“循环”或“for”来提取每一行数据,并将提取的数据用于 gams 中的两个参数
- php - 获取日期间隔内的重复日期
- javascript - 如何使用momentjs获取3个字母的时区?
- jenkins - 在管道 SH 脚本中使用 Jenkins 环境变量
- python - 全局分布拟合共享一些参数,而没有在 python 中指定 bin 大小
- sql - SDO_NN 第二近邻