我有这个SML/NJ代码,它从文本文件中读取一行,然后它会为我返回一个列表,但我很难让它对每一行都做同样的事情,并在没有更多行时停止。有没有人可以帮我,给我一个循环样本?
fun readlist(infile : string) =
let val ins = TextIO.openIn infile
val list = []
fun listing() = [TextIO.inputLine ins]::list;
in listing()
end
我正在写的sml程序,运行在SML/NJ和MLton (非交互式)。当我在sml文件中使用print语句时,SML/NJ总是添加
val it = () : unit
输出,这会使输出变得混乱。MLton不会这样做。
有什么方法可以删除这个输出吗?我试过CM_VERBOSE=false,但没有用。
运行SML/NJ v110.73。
我正在用Standard (SML/NJ)编写一个“脚本”,它设置了我喜欢的交互环境。脚本所做的最后一件事就是打印一条消息,指示一切顺利进行。本质上,最后一行是:
print "SML is ready.\n";
当我运行这个脚本时,一切都进行得很顺利,但是SML解释器显示了来自打印函数的返回值。
SML is ready.
val it = () : unit
-
由于我只是在屏幕上打印一些东西,我如何才能抑制"val = ():unit“输出,以便我看到的只有"SML准备就绪”消息,然后是解释器提示符?
好的,我知道SML/NJ有一个自动安装的windows .msi。
不幸的是,作为严格的安全策略,我不能在我的办公室Windows机器上安装它,我也不想因为给我权限而与那些it人员争论。
所以,我可以安装SML/NJ没有安装程序,maybe some zip I can get and just uncompress it for the sml.exe
我是SML的新手,我正在尝试在SML/NJ中运行一些来自github的代码。我当前正在尝试调用该函数
fun dates_in_month(xs : (int * int * int) list, n : int) =
if null xs then
[]
else if #2 (hd xs) = n then
(hd xs)::dates_in_month(tl xs, n)
else
dates_in_month(tl xs, n)
就像这样
dates_in_month(3::2::1::nil, 5)
但我在SML/NJ 110.97上收到以下错
当我尝试使用函数List.nth时,shell将返回以下错误消息:
- List.nth([1,2,3],0);
[autoloading]
unexpected exception (bug?) in SML/NJ: Io [Io: openIn failed on "/Users/jhr/Work/smlnj/osx-dist/smlnj.dst/sml.boot.x86-unix/smlnj/basis/.cm/x86-unix/basis.cm", No such file or directory]
raised at: Basis/Implementation/I
我最近看到人们在他们的SML/NJ程序中使用as。我找到的最有用的参考资料是。
虽然OCaml也属于ML编程语言家族,但它们是不同的。例如,在前面的答案中给出的示例程序中,
let rec compress = function
| a :: (b :: _ as t) -> if a = b then compress t else a :: compress t
| smaller -> smaller;;
我把它翻译成SML/NJ (如果我做错了,请纠正我)
fun compress (a :: (t as b :: _)) = if a = b then c
我试图使用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));
这是输出:
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]
[librar
问题在标题中。
如果我在REPL中这样做( windows命令行中的SML/NJ)
val x = "hello\nworld";
我本以为
val x = "hello
world" : string
或者类似的东西,但我得到了
val x = "hello\nworld" : string
尽管我发现\n是SML字符串中的换行符。
在ocaml,这是可行的:
# let a b c=b@[c];;
val a : 'a list -> 'a -> 'a list = <fun>
# a [1] 2;;
- : int list = [1; 2]
使用sml时(sml/nj):
- fun a(b,c)=b@[c];;
val a = fn : 'a list * 'a -> 'a list
- a [1] 2;;
stdIn:4.1-4.8 Error: operator and operand do not agree [tycon mism
我用ML编写了这段代码:
local
fun unfolder( [] , n ) = []
| unfolder( l::ls, n ) = (n, l) :: unfolder( ls, n )
in
fun flat list = unfolder(list, 1)
end;
它给了我一个错误:
unexpected exception (bug?) in SML/NJ: EA [EA]
raised at: ../../MLRISC/x86/mltree/x86.sml:417.32-417.34
../compiler/Basics/
当使用SML/NJ库的HTML4库时,如何将HTML4的标准ML表示转换为字符串?
例如,如果我有下面的HTML表示,我可以使用什么函数来获得类似于<html><head><title>Example</title></head><body><h1>Hello!</h1></body></html>的字符串
(* CM.make "$/html4-lib.cm"; *)
open HTML4;
val myHTML = HTML {
version=NON
在SML/NJ中,接受以下表达式:
- val 'a a = [];
val a = [] : 'a list
- val 'a a = 1;
val a = 1 : int
'a在这里意味着什么?我不知道它们会产生什么效果,这是在定义中定义的,但是我在Standard的编程中找不到相关的描述。
请!
我想在SML中编写一个代码,它类似于C++的代码
i=i+1;
或
i++
简而言之,当if语句为true时,我想计算循环(递归)运行了多少次。进一步阐明。我的有问题的代码如下所示:
val i = 0;
fun <function_name>() =
if <condition>
then (i+1;
<recursive_expression>)
else expression
但是这里的问题是,无论递归在SML/NJ中执行了多少次,答案总是1。
任何想法都会有帮助的!