在安德鲁·科尼格的关于ML类型推断的轶事中,作者使用归并排序的实现作为ML的学习练习,并且发现了一个“不正确”的类型推断,这让他非常高兴。 Much to my surprise, the compiler reported a type of 'a list -> int list...
我想向初学者推广OCaml,并且正在寻找好的英文教程;不仅是你听说过的,而是你实际尝试过并发现有用的...
我知道在REPL中分号被用作终止符。但是我对于在源文件中何时使用它们感到困惑。 例如,在val x = 1后面不需要使用分号。但是如果我在use "foo.sml"后省略它,编译器将抱怨。 那么,在使用分号方面有什么规则呢?
我开始学习函数式编程语言,例如 Haskell、ML,大部分练习都会展示以下内容: foldr (+) 0 [ 1 ..10] 相当于 sum = 0 for( i in [1..10] ) sum += i 这让我想到,为什么编译器不能知...
o组合操作符(如val x = foo o bar,其中foo和bar都是函数),只能用于单参数函数和/或参数数量相等的函数吗? 如果不是,那么如何将foo(x,y)与bar(x)组合起来的语法是什么。
我意识到这可能是一个愚蠢的问题,但是... 如果我要链接一堆不需要知道彼此值的let语句,使用and还是in更好? 例如,以下哪个更可取(如果有的话):let a = "foo" and b = "bar" and c = "baz" in (* etc. *) 或者let a = "...
我在学习函数式编程时,看到了多个关于Church Rosser定理的参考资料,特别是钻石属性图,但我没有找到一个很好的代码示例。 如果像Haskell这样的语言可以被视为一种λ演算,那么使用该语言本身可以想出一些例子。 如果示例能够清晰地展示步骤或规约如何导致易于并行执行,我会给予额外加分。
现在有全新的“函数式编程”范例,与过程式编程相比需要完全改变思维模式,它使用高阶函数、纯度、单子等特性,在命令式和面向对象语言中通常看不到。 我的问题是这些语言的实现与命令式或面向对象语言有何不同,例如内存管理或指针等内部细节。 有一些函数式语言是运行在JVM之上的。这是否意味着这些语言在...
Standard ML中的Functor与模块系统相关,可以基于其他结构生成结构。下面是一个生成不同类型列表组合器的functor示例,但该示例存在问题: 各种类型的列表都有其优点--例如,惰性列表可以是无限长的,而连接列表具有O(1)的连接操作符。但当所有这些列表类型都符合相同的签名时,f...
我正在尝试使用SML/NJ,使用sml < source.sml运行代码,但它会输出太多信息。 例如,这是source.sml的内容:fun fac 0 = 1 | fac n = n * fac (n - 1) val r = fac 10 ; print(Int.toStrin...