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

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

19得票7回答
你会推荐哪个英文教程来学习OCaml?

我想向初学者推广OCaml,并且正在寻找好的英文教程;不仅是你听说过的,而是你实际尝试过并发现有用的...

17得票1回答
在SML中何时使用分号?

我知道在REPL中分号被用作终止符。但是我对于在源文件中何时使用它们感到困惑。 例如,在val x = 1后面不需要使用分号。但是如果我在use "foo.sml"后省略它,编译器将抱怨。 那么,在使用分号方面有什么规则呢?

16得票6回答
编译器能否进行数学推导或证明?

我开始学习函数式编程语言,例如 Haskell、ML,大部分练习都会展示以下内容: foldr (+) 0 [ 1 ..10] 相当于 sum = 0 for( i in [1..10] ) sum += i 这让我想到,为什么编译器不能知...

16得票3回答
SML中的`o`运算符只适用于单参数函数吗?

o组合操作符(如val x = foo o bar,其中foo和bar都是函数),只能用于单参数函数和/或参数数量相等的函数吗? 如果不是,那么如何将foo(x,y)与bar(x)组合起来的语法是什么。

15得票4回答
在使用“let”语句链式编程时,是更好使用“and”还是“in”?

我意识到这可能是一个愚蠢的问题,但是... 如果我要链接一堆不需要知道彼此值的let语句,使用and还是in更好? 例如,以下哪个更可取(如果有的话):let a = "foo" and b = "bar" and c = "baz" in (* etc. *) 或者let a = "...

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

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

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

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

11得票3回答
标准ML的函数器范例

Standard ML中的Functor与模块系统相关,可以基于其他结构生成结构。下面是一个生成不同类型列表组合器的functor示例,但该示例存在问题: 各种类型的列表都有其优点--例如,惰性列表可以是无限长的,而连接列表具有O(1)的连接操作符。但当所有这些列表类型都符合相同的签名时,f...

11得票1回答
仅使用SML/NJ打印输出

我正在尝试使用SML/NJ,使用sml < source.sml运行代码,但它会输出太多信息。 例如,这是source.sml的内容:fun fac 0 = 1 | fac n = n * fac (n - 1) val r = fac 10 ; print(Int.toStrin...