8得票1回答
N元组与二元组的区别

在 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...

8得票3回答
如何在PolyML解释器中添加readline支持?

我发现polyml是ML的实现,可以在Ubuntu上很容易地安装(在存储库中命名为polyml并且可以使用poly执行)。我正在遵循Andrew Cumming的A Gentle Introduction to ML。在与polyml解释器进行几分钟的实验后,我发现它不支持readline (...

8得票2回答
ML家族的编译器是否会对尾调用进行任何复杂的优化?

我认为以下函数定义是尾递归的: fun is_sorted [] = true | is_sorted [x] = true | is_sorted (x::(y::xs)) = if x > y then false else is_sor...

14得票1回答
函数式编程语言中的Church-Rosser定理示例

我在学习函数式编程时,看到了多个关于Church Rosser定理的参考资料,特别是钻石属性图,但我没有找到一个很好的代码示例。 如果像Haskell这样的语言可以被视为一种λ演算,那么使用该语言本身可以想出一些例子。 如果示例能够清晰地展示步骤或规约如何导致易于并行执行,我会给予额外加分。

7得票1回答
在SML中等价于编码rank-2多态性

runST是Haskell函数,通过类型静态约束可用资源的寿命。为此,它使用了rank-2多态性。标准ML更简单的类型系统只提供rank-1多态性。 标准ML是否仍然可以使用类型来约束资源的寿命,从而实现类似的结果? 这个页面和这个页面演示了一些重构代码的方法,只需要更简单的类型就可以。如...

11得票2回答
我能否在OCaml toplevel上构建图形界面?

关于交互式toplevel和图形UI编程的几个问题: 是否可以从ocaml toplevel动态构建图形界面? 也可以使用Graphics库吗?

42得票3回答
变体或多态变体?

我注意到,在我认识的OCaml程序员中,有些人总是使用多态变体(未声明的变体,带有反引号前缀),而其他人则从不使用多态变体,更喜欢在类型中声明变体。 除了性能原因(目前编译多态变体的效率比简单变体低),专业的OCaml开发人员如何在它们之间进行选择?

25得票2回答
推断类型似乎检测到了一个无限循环,但实际发生了什么?

在安德鲁·科尼格的关于ML类型推断的轶事中,作者使用归并排序的实现作为ML的学习练习,并且发现了一个“不正确”的类型推断,这让他非常高兴。 Much to my surprise, the compiler reported a type of 'a list -> int list...

8得票1回答
如何理解《纯函数数据结构》中描述的分段二项堆

在论文Purely Functional Data Structures的第6.3.1章中,写道: 然后,每当我们从一个新元素和秩为0到r-1的树段创建一个新树时,我们只需将新元素与段中的第一个根(即秩为0的树的根)进行比较。更小的元素成为新的根,而更大的元素则成为根的秩为0的子节点。 ...

13得票7回答
从语言实现的角度来看,函数式语言与其他语言有何不同?

现在有全新的“函数式编程”范例,与过程式编程相比需要完全改变思维模式,它使用高阶函数、纯度、单子等特性,在命令式和面向对象语言中通常看不到。 我的问题是这些语言的实现与命令式或面向对象语言有何不同,例如内存管理或指针等内部细节。 有一些函数式语言是运行在JVM之上的。这是否意味着这些语言在...