标签: ml

ML中的空列表是什么类型?

我想知道 SML 中空列表的类型到底是什么(我正在使用 PolyML)?当我输入[]解释器时,我会得到:

val it = []: 'a list
Run Code Online (Sandbox Code Playgroud)

这正是我所期望的。但是,如果我输入:

fun f a = if a = 0 then [] else [[]];
Run Code Online (Sandbox Code Playgroud)

然后我得到:

val f = fn: int -> 'a list list
Run Code Online (Sandbox Code Playgroud)

这似乎暗示也[]有这种类型'a list list。这到底是如何运作的?

types ml sml

3
推荐指数
1
解决办法
2790
查看次数

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

标准ML中的结构比较

我似乎无法找到为什么这不起作用的参考:

- (2000,1)<(2000,1);    
stdIn:18.1-18.18 Error: operator and operand don't agree [overload]
  operator domain: 'Z * 'Z
  operand:         (int * int) * (int * int)
  in expression:
    (2000,1) < (2000,1)
Run Code Online (Sandbox Code Playgroud)

标准ML是否支持结构比较?

ml sml comparison-operators

2
推荐指数
1
解决办法
2221
查看次数

SML Ml编程函数is_older日期与布尔条件

我是ML编程的新手,我有一个编写函数is_older的函数,它接受两个日期并计算为true或false.如果第一个参数是第二个参数之前的日期,则计算结果为true.
(如果两个日期相同,则结果为false.)

val is_older = fn : (int * int * int) * (int * int * int) -> bool // Binding Like
Run Code Online (Sandbox Code Playgroud)

我试过这个(使用SML of New Jersy cmd提示)

fun is_older((y1,m1,d1),(y2,m2,d2))= if (y1<y2) then true 
else if (y1=y2 andalso m1<m2) then true 
else if (y1=y2 andalso m1=m2 andalso d1<d2) then true;
Run Code Online (Sandbox Code Playgroud)

它给出了错误

Error syntax error: deleting SEMICOLON ID 
Run Code Online (Sandbox Code Playgroud)

functional-programming ml sml smlnj

2
推荐指数
1
解决办法
2144
查看次数

SMLNJ,尝试从文件运行程序,未知错误

我试图使用'use'命令从文件中执行几行代码,但是我收到错误,我不明白,

StdIn:1.6-1.10 Error unclosed string
Run Code Online (Sandbox Code Playgroud)

屏幕截图

我到处搜索,试图找出那个错误意味着什么,但现在好运,

请帮忙

ml sml smlnj

2
推荐指数
1
解决办法
1559
查看次数

符号是什么!在SML意味着什么?

符号是什么!在SML意味着什么?

fun polysort(_,[]) = []
| polysort(_,[x]) = [x]!
| polysort(less,xs) =
 let
  val (ys, zs) = split xs
   in
   merge(less,polysort(less,ys), polysort(less, zs))
 end;
Run Code Online (Sandbox Code Playgroud)

这会扭转它还是什么?我认为这与ref有关,但我也不明白.

ml ref sml

2
推荐指数
1
解决办法
219
查看次数

这个素数分解代码适用于小数字,但是对于大数字而言失败并出现OutOfMemoryException?

我正试图获得大量的主要因素..

let factors (x:int64) =
  [1L..x]
  |> Seq.filter(fun n ->  x%n = 0L)

let isPrime (x:int64) = 
 factors x
 |> Seq.length = 2

let primeFactors (x:int64)= 
 factors x 
 |> Seq.filter isPrime
Run Code Online (Sandbox Code Playgroud)

这适用于13195但是因为600851475143的OutOfMemoryException而失败?

对不起,如果我错过了一些明显的东西,那只是我在F#上的第三天,直到今天早上我还不知道是什么主要因素.

primes f# ml

2
推荐指数
1
解决办法
210
查看次数

在OCaml 4.01.0中缺少Option.default

我要用它String.Set.choose some_set从一组中挑选一个字符串.

这个方法返回StringOption,但我想使用另一个方法,返回值为第二个,因此我想将StringOption转换为字符串.

我知道根据OCaml docs(链接在这里) Option.default应该这样做但是由于某种原因它缺失(尽管 Option其他所有方法都存在).

有没有办法解决这个问题或让我的下一个方法接受StringOption?

谢谢,

ocaml ml

2
推荐指数
1
解决办法
241
查看次数

SML算术函数的类型推断为int

当定义一个取值的平方的简单函数时,SML NJ会将此函数的签名推断为整数类型.声明float类型的签名时,SML可以在此处使用浮点值.

- fun sqr x = x * x;
val sqr = fn : int -> int
- fun sqqr (x : real) = x * x;
val sqqr = fn : real -> real
- sqqr 3.4;
val it = 11.56 : real
  • SML为何以及如何推断此特定类型?
  • 对于int有特定的偏好吗?
  • 这些算术运算是特殊行为还是可以在其他地方找到?

types ml sml smlnj

2
推荐指数
1
解决办法
252
查看次数

标准ML二叉树遍历

我是SML的新手并且正在进行关于树遍历的练习.这是问题的设定.

datatype 'a bTree = nil | bt of 'a bTree * 'a * 'a bTree;
Run Code Online (Sandbox Code Playgroud)

我需要编写一个函数inorder,它接受一个二叉树并在inorder遍历中返回树的所有成员的列表.

我写了这一行:

fun inorder(nil) = nil
  | inorder(bt(left,key,right)) = inorder(left) @ [key] @ inorder(right);
Run Code Online (Sandbox Code Playgroud)

但得到一些错误,不知道如何解决:

Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z list * 'Z list
operand:         'Z list * 'Y bTree
in expression:
  (key :: nil) @ inorder right

Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z list * 'Z list
operand:         'Y bTree * _ …
Run Code Online (Sandbox Code Playgroud)

binary-tree ml sml tree-traversal

2
推荐指数
1
解决办法
1243
查看次数