syntax - OCaml 语法:变量并排
问题描述
我觉得我错过了关于这种奇怪语言的一些重要基础知识。
考虑以下程序:
let q f x = f x x;;
let s = q (+);;
如果我在 OCaml 中运行它,我会得到:
val q : ('a -> 'a -> 'b) -> 'a -> 'b = <fun>
val s : int -> int = <fun>
与我见过的其他 OCaml 代码相比,它的语法对我来说真的很奇怪。在第一行中,将 q 设置为 fxx 有什么作用?q (+) 也有什么作用(希望如果我得到第一部分,我能理解这一点)?理解此代码的任何帮助都会有所帮助。
解决方案
您可能错过了空间是函数的应用这一事实。
用括号表示参数,您所拥有的是
q(f,x) = f(x,x)
s(n) = q(plus, n)
plus(k,l) = k + l
(+)
x
作为接受和y
返回的函数的快捷方式x + y
,您也可以编写(+) x x
它。
在你的情况下q (+)
是功能
fun x -> x + x
推荐阅读
- python - ImportError:无法从“PIL”导入名称“ExifTags”
- arrays - 访问 PSCustomObject Powershell 中的对象数组
- javascript - 从 ReactJS 中的 JSON 文件动态导入图像
- javascript - 在 chrome [devtools] 中管理 JavaScript setIntervals
- firebase - 我应该将数据加密到 Firestore 中吗?
- bash - 在此 jq 命令末尾计算值总和的最简单方法是什么?
- java - WebSphere 中的 JAX-WS 空响应,但 Tomcat 中没有
- database - 基于 Firebase 中的多个过滤器的查询
- javascript - 无法获取使用 SheetJS js-xlsx 库生成的可读 xlsx 文件
- sql - 从存储过程运行动态 SQL 查询以填充 GridView