我想知道 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。这到底是如何运作的?
LISP或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编程的新手,我有一个编写函数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) 我试图使用'use'命令从文件中执行几行代码,但是我收到错误,我不明白,
StdIn:1.6-1.10 Error unclosed string
Run Code Online (Sandbox Code Playgroud)
我到处搜索,试图找出那个错误意味着什么,但现在好运,
请帮忙
符号是什么!在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有关,但我也不明白.
我正试图获得大量的主要因素..
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#上的第三天,直到今天早上我还不知道是什么主要因素.
我要用它String.Set.choose some_set从一组中挑选一个字符串.
这个方法返回StringOption,但我想使用另一个方法,返回值为第二个,因此我想将StringOption转换为字符串.
我知道根据OCaml docs(链接在这里) Option.default应该这样做但是由于某种原因它缺失(尽管 Option其他所有方法都存在).
有没有办法解决这个问题或让我的下一个方法接受StringOption?
谢谢,
当定义一个取值的平方的简单函数时,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的新手并且正在进行关于树遍历的练习.这是问题的设定.
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)