标签: sml

标准ML的GUI?

出于好奇,我最近开始学习标准ML.所以我所知道的是有一个高效的编译器(MLton),它允许我们自由地使用抽象而不用担心性能.

如果我可以使用Standard ML进行一些GUI编程,那将是完美的.是否有像Gtk,Qt或WxWidgets绑定标准ML的东西?

非常感谢你.

user-interface binding ml sml graphical-programming

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

SML How to check variable type?

Is there any way to check/test the type of a variable?

I want to use it like this:

if x = int then foo
else if x = real then bar
else if x = string then ...
     else .....
Run Code Online (Sandbox Code Playgroud)

sml

10
推荐指数
2
解决办法
8735
查看次数

标准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
查看次数

如何在伊莎贝尔的ML级别轻松编写简单的策略?

在Isabelle理论文件中,我可以编写简单的单行策略,如下所示:

apply (clarsimp simp: split_def split: prod.splits)
Run Code Online (Sandbox Code Playgroud)

然而,我发现,当我开始编写ML代码来自动化证明,生成一个ML tactic对象时,这些单行变得相当冗长:

clarsimp_tac (Context.proof_map (
    Simplifier.map_ss (fold Splitter.add_split @{thms prod.splits})
    #> Simplifier.map_ss (fn ss => ss addsimps [@{thm split_def}]))
  @{context}) 1
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来编写Isabelle/ML级别的简单单线战术?

例如,像反引语这样的东西:@{tactic "clarsimp simp: split_def split: prod.splits"}产生类型的函数context -> tactic,将是一个理想的解决方案.

sml isabelle

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

在OSX 10.6下运行smlnj时遇到问题

我从这里使用DMG for x86下载并安装了SML NJ实现:http: //smlnj.cs.uchicago.edu/dist/working/110.72/index.html

但是,当我打开一个终端窗口并转到/usr/local/smlnj-110.72/bin并运行sml时,我找不到bash命令.我对UNIX不太熟悉,所以我猜我做错了.

谢谢您的帮助!

macos sml smlnj

9
推荐指数
2
解决办法
3252
查看次数

SML中的递归匿名函数

是否可以在SML中编写递归匿名函数?我知道我可以使用fun语法,但我很好奇.

我写过,作为我想要的一个例子:

val fact =
    fn n => case n of
                 0 => 1
               | x => x * fact (n - 1)
Run Code Online (Sandbox Code Playgroud)

recursion functional-programming sml anonymous-function

9
推荐指数
2
解决办法
6160
查看次数

Scala是否有相当于ML的"as"结构的声明?

在ML中,可以为匹配模式的每个元素指定名称:

fun findPair n nil = NONE
| findPair n (head as (n1, _))::rest =
    if n = n1 then (SOME head) else (findPair n rest)
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我为第一对列表定义了一个别名,并匹配了该对的内容.Scala中是否有等效的构造?

scala sml pattern-matching

9
推荐指数
1
解决办法
372
查看次数

仅使用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.toString(r));
Run Code Online (Sandbox Code Playgroud)

这是输出:

Standard ML of New Jersey v110.77 [built: Tue Mar 10 07:03:24 2015]
- val fac = fn : int -> int
val r = 3628800 : int
[autoloading]
[library $SMLNJ-BASIS/basis.cm is stable]
[autoloading done]
3628800val it = () : unit
Run Code Online (Sandbox Code Playgroud)

来自标准ML中的抑制"val it"输出,如何禁用SMLNJ警告?,并且SMLNJ想要从每个print语句执行中删除"val it =():unit" …

ml sml smlnj

9
推荐指数
1
解决办法
782
查看次数

SML中"local"和"let"的区别

我找不到一个初学者友好的答案,解决了SML中"local"和"let"关键字之间的区别.有人可以提供一个简单的例子,并解释何时使用另一个?

local sml let

9
推荐指数
2
解决办法
4071
查看次数

Linux的快速标准ML编译器或字节码解释器,带有读取 - 评估 - 打印循环?

对于我将要教授的课程,我正在为标准ML寻找快速编译器或字节码解释器. 我正在寻找快速编译时间; 任何合理的运行时间都可以.如果编译模型简单明了,则可获得奖励.课堂上的学生也将使用MLton生成好的二进制文件,但MLton的编译速度很慢,有时学生需要可以与之交互的东西.

这就是我所知道的:

  • 新泽西州的标准ML有一个交互式读取 - 评估 - 打印循环,但它的编译规则有点奇怪,而且有点慢.不过,它可能是领先的竞争者.

  • 莫斯科ML曾经是理想的,但它仍未提供2004年标准基础库.最不幸的是,因为除了它的许多其他优良属性外,莫斯科ML还有一个交互式帮助系统 - 但我不能给我的学生一个编译器,它的库与所有在线文档所说的不同.

  • Poly/ML可能很适合这个法案,除了在线查看文档,我无法弄清楚如何编译它.那可能没问题.

目前看起来好像SML/NJ或Poly/ML都是最好的折衷方案.自从我在标准ML中做了任何认真的工作已经很多年了,我欢迎有关其他编译器的信息,或者根据您的经验,这些替代方案中哪些是最快的交互和最容易学习使用的.

compiler-construction interpreter functional-programming sml

8
推荐指数
1
解决办法
4119
查看次数