标签: ml

(ML)模块vs(Haskell)类型类

根据Harper(https://existentialtype.wordpress.com/2011/04/16/modules-matter-most/),似乎Type Classes根本没有提供与Modules提供的相同级别的抽象,而我正在拥有很难确切地弄清楚原因.并且在该链接中没有示例,因此我很难看到关键差异.还有其他关于如何在模块和类型类之间进行翻译的论文(http://www.cse.unsw.edu.au/~chak/papers/modules-classes.pdf),但这对于从程序员的角度来看实现(它只是说没有人可以做的事情,另一个人无法模仿).

具体来说,在第一个链接中:

首先,他们坚持认为类型可以完全以一种方式实现类型类.例如,根据类型类的哲学,整数可以以一种方式(通常的顺序)排序,但显然有许多有趣的排序(例如,通过可分性).第二个问题是它们混淆了两个不同的问题:指定类型如何实现类型类,以及指定在类型推断期间何时应该使用这样的规范.

我也不明白.一个类型可以在ML中以多种方式实现类型类?如果不创建新类型,您将如何通过示例按可分性排序整数?在Haskell中,您必须执行诸如使用数据之类的操作,并instance Ord提供替代排序.

第二个,不是两个在Haskell中是截然不同的吗?指定"何时应在类型推断期间使用此类规范"可以通过以下方式完成:

blah :: BlahType b => ...
Run Code Online (Sandbox Code Playgroud)

其中BlahType是在类型推断期间使用的类而不是实现类.然而,"类型如何实现类型类"是使用完成的instance.

有人可以解释链接真正想说的内容吗?我只是不太明白为什么模块比Type Classes更少限制.

haskell ml sml

22
推荐指数
1
解决办法
3290
查看次数

你会建议哪些英语教程学习OCaml?

我想向初学者宣传OCaml,我正在寻找英语的好教程; 不仅仅是你听说过,而是你实际上已经尝试并发现有用......

ocaml functional-programming ml

19
推荐指数
3
解决办法
4475
查看次数

编译器可以在数学上推断/证明吗?

我开始学习函数式编程语言Haskell,ML大多数练习都会展示如下:

   foldr (+) 0 [ 1 ..10]
Run Code Online (Sandbox Code Playgroud)

这相当于

   sum = 0
     for( i in [1..10] ) 
         sum += i
Run Code Online (Sandbox Code Playgroud)

所以这让我想到为什么编译器不能知道这是算术级数并使用O(1)公式来计算?特别是对于FP没有副作用的纯语言?这同样适用

  sum reverse list == sum list
Run Code Online (Sandbox Code Playgroud)

给定一个+ b = b + a和反向定义,编译器/语言可以自动证明吗?

haskell functional-programming ml

16
推荐指数
3
解决办法
653
查看次数

SML`o`运算符仅对单参数函数有用吗?

o组合物操作者(例如val x = foo o bar,其中foobar是两个功能),仅在单参数的函数和/或功能可用与参数相等数量?如果没有,是什么,比如说,组成语法foo(x,y)bar(x).

ml sml smlnj

15
推荐指数
2
解决办法
4378
查看次数

链接"let"语句时最好使用"and"或"in"?

我意识到这可能是一个愚蠢的问题,但......

如果我链接了一堆let里面做陈述并不需要知道对方的价值观,是它更好地使用andin

例如,如果有的话,哪一个更可取:

let a = "foo"
and b = "bar"
and c = "baz"
in
  (* etc. *)
Run Code Online (Sandbox Code Playgroud)

要么

let a = "foo" in
let b = "bar" in
let c = "baz"
in
  (* etc. *)
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我,前者应该"更好"(通过对"更好"的非常小的定义),因为它创造了必要的最小范围,而后者是范围内的范围.编译器/解释器注意的范围,但最终是不重要和不必要的深度.

ocaml scope coding-style ml let

14
推荐指数
2
解决办法
1399
查看次数

函数式编程语言中的Church-Rosser定理示例

我已经看到了教会Rosser定理的多个参考,特别是钻石属性图,同时学习函数式编程,但我没有遇到过一个很好的代码示例.

如果像Haskell这样的语言可以被视为一种lambda演算,那么必须能够使用语言本身来演示一些例子.

如果示例轻松地显示步骤或减少如何导致易于并行执行,我会给予奖励积分.

haskell functional-programming ml lambda-calculus

14
推荐指数
1
解决办法
1047
查看次数

什么时候在SML中使用分号?

我知道分号在REPL中用作终结符.但我很困惑何时在源文件中使用它们.

例如,之后没有必要val x = 1.但如果我之后省略它use "foo.sml",编译器会抱怨它.

那么,使用分号的规则是什么?

ml sml smlnj

14
推荐指数
1
解决办法
2503
查看次数

功能语言与语言实现的观点有何不同

有一个全新的"函数式编程"范式,与程序式编程相比,需要彻底改变思维模式.它使用更高阶函数,纯度,monad等,我们通常在命令式和面向对象语言中看不到它们.

我的问题是这些语言的实现与命令式或面向对象语言的区别在于,例如,内存管理或内部指针等.

有一些函数语言在JVM之上运行.这是否意味着这些语言在内部像JVM上的其他语言一样工作?

lisp haskell functional-programming ml

13
推荐指数
2
解决办法
811
查看次数

我可以从ocaml toplevel构建图形界面吗?

- 关于交互式顶层和图形UI编程的几个问题:

  1. 是否可以从ocaml toplevel动态构建图形界面?

  2. 也可以使用图形库吗?

gtk ocaml functional-programming ml read-eval-print-loop

11
推荐指数
2
解决办法
765
查看次数

标准ML仿函数示例

标准ML中的函数与模块系统相关,并且可以基于其他结构生成结构.下面给出了为各种类型的列表生成列表组合器的仿函数的示例,但是此示例存在一个问题:

各种类型的列表都具有优势 - 例如,惰性列表可以无限长,并且concantenation列表具有O(1)concat运算符.但是当所有这些列表类型符合相同的签名时,仿函数只能使用它们的常规属性.

因此,我的问题是:什么是一个很好的例子,当函子有用时,各种生成的结构不会失去它们的特殊能力?

signature MYLIST =
sig
  type 'a t
  val null : 'a t -> bool
  val empty : 'a t
  val cons : 'a * 'a t -> 'a t
  val hd : 'a t -> 'a
  val tl : 'a t -> 'a t
end

structure RegularList : MYLIST =
struct
  type 'a t = 'a list
  val null = List.null
  val empty = []
  val cons = op::
  val hd = List.hd
  val tl …
Run Code Online (Sandbox Code Playgroud)

functional-programming ml sml functor

10
推荐指数
1
解决办法
5112
查看次数