在 Ocaml 中,具有不同元数的元组具有不同的类型和值构造函数: # let a = (1, 2, 3);; val a : int * int * int = (1, 2, 3) # let b = (1, (2, 3));; val b : int * (int * int) = (1...
我认为以下函数定义是尾递归的: fun is_sorted [] = true | is_sorted [x] = true | is_sorted (x::(y::xs)) = if x > y then false else is_sor...
我在学习函数式编程时,看到了多个关于Church Rosser定理的参考资料,特别是钻石属性图,但我没有找到一个很好的代码示例。 如果像Haskell这样的语言可以被视为一种λ演算,那么使用该语言本身可以想出一些例子。 如果示例能够清晰地展示步骤或规约如何导致易于并行执行,我会给予额外加分。
runST是Haskell函数,通过类型静态约束可用资源的寿命。为此,它使用了rank-2多态性。标准ML更简单的类型系统只提供rank-1多态性。 标准ML是否仍然可以使用类型来约束资源的寿命,从而实现类似的结果? 这个页面和这个页面演示了一些重构代码的方法,只需要更简单的类型就可以。如...
关于交互式toplevel和图形UI编程的几个问题: 是否可以从ocaml toplevel动态构建图形界面? 也可以使用Graphics库吗?
我注意到,在我认识的OCaml程序员中,有些人总是使用多态变体(未声明的变体,带有反引号前缀),而其他人则从不使用多态变体,更喜欢在类型中声明变体。 除了性能原因(目前编译多态变体的效率比简单变体低),专业的OCaml开发人员如何在它们之间进行选择?
在安德鲁·科尼格的关于ML类型推断的轶事中,作者使用归并排序的实现作为ML的学习练习,并且发现了一个“不正确”的类型推断,这让他非常高兴。 Much to my surprise, the compiler reported a type of 'a list -> int list...
在论文Purely Functional Data Structures的第6.3.1章中,写道: 然后,每当我们从一个新元素和秩为0到r-1的树段创建一个新树时,我们只需将新元素与段中的第一个根(即秩为0的树的根)进行比较。更小的元素成为新的根,而更大的元素则成为根的秩为0的子节点。 ...
现在有全新的“函数式编程”范例,与过程式编程相比需要完全改变思维模式,它使用高阶函数、纯度、单子等特性,在命令式和面向对象语言中通常看不到。 我的问题是这些语言的实现与命令式或面向对象语言有何不同,例如内存管理或指针等内部细节。 有一些函数式语言是运行在JVM之上的。这是否意味着这些语言在...