在sml中根据条件匹配打印两个内容

这是一个错误。如果条件匹配,我想做两件事。如何执行此操作?将命令括起来,并用分号分隔: if (1=1) then print "sdfsdfs" and print "sdfsdfsdfsdf" else print "sdfsdf"; if 1=1 then (print "sdfsdfs"; print "sdfsdfsdfsdf") else print "sdfsdf"

SML运算符和操作数don';不同意错误

我正在尝试编写一个类型为的快速排序函数 'a list * ('a * 'a -> bool) -> 'a list 但出于某种原因,我得到: 'a list -> ('a * 'a -> bool) -> 'a list 以下是我的函数代码: fun quicksort xs f = let fun qs [] = [] | qs [x] = [x] | qs (p::xs) = let val (less, more)

Sml 输出在REPL中被截断为#-符号

我写了一个函数,它可以正常工作,但我不明白为什么输出是这样的 功能: 测试: 输出: 这只是一个输出限制(是的,这是令人困惑的)-默认情况下,顶级(交互式shell)中值打印输出的深度限制为相当小的数字(即5)。跳过的部分用#打印 您可以使用printDepth变量覆盖此深度(至少在SML-NJ中): Control.Print.printDepth := 1024; 顺便说一下,这里不需要单独的do_xor和局部函数,只要 fun xor(alpha, beta) = Or(...); 行

是否有内置函数检查SML中的数字是否为整数

sml中是否有内置的Is整数函数 我的意思是: 我必须从文件中读取一个数字,如果它是整数,则将其显示为输出,如果该数字不是整数,则引发异常。例如,我必须检查(Int.fromString())的输出是否为整数,如果是,则显示它…(重复上述步骤)类型系统将确保给定函数的值类型与函数的类型签名匹配 也就是说,如果您有一个以整数作为输入的函数,例如 fun double n = 2 * n (* this function has type: int -> int *) 然后n将始终是一个整数

如何在SML中将字符串解析为(int*int)元组?

我有一个类似这样的字符串“3,4\r\n”,我想将它们转换成一个元组,即(3,4) 我们如何在SML中实现这一点 获取字符串值的原因是因为我正在读取一个返回类似字符串的文件。下面应该可以实现这一点 exception MyError fun convert(s) = case String.explode(s) of x::','::y::_ => (x,y) | _ => raise MyError PS-在工作中无法使用SML口译员。

如何在SML中推导函数类型(fun-foo f=f 5;)

我有一个foo函数,定义如下 fun foo f = f 5; 如何推导函数类型?我们可以看到f必须是一个函数。我们还看到,f接受一个整数作为输入,因为我们调用f5。因此f必须具有类型int->'a foo然后获取一个int->'a,并生成一个'a,生成:foo:(int->'a)->'aSML使用此算法的一个变体进行类型推断:

SML中扁平化的简单实现有问题

我正在尝试实现扁平化:“列表->”SML中的列表。 我认为这应该是一个相对简单的高阶函数。我的实现是 val flatten = List.reduce (op @) [] 然而,我收到了一条奇怪的错误消息:“append.sml:1.6-1.36警告:由于 值限制被实例化为虚拟类型(X1,X2,…)。因此,当我尝试展平整型列表时,会出现一个类型错误: :>展平[1,2],[3] stdIn:2.1-2.20错误:运算符和操作数不一致[文字] 操作员域:?.X1列表 操作数:int列表 在表达

将命令行参数写入SML中的文件

我正在尝试将SML程序中的命令行参数写入一个文件,每个参数位于单独的一行。如果在命令行上运行sml main.sml a b c easy as 1 2 3,所需的输出将是一个包含以下内容的文件: a b c easy as 1 2 3 但是,我从SML获得以下输出: $ sml main.sml a b c easy as 1 2 3 val filePath = "/Users/Josue/Desktop/espi9890.txt" : string val args = ["a","b"

Sml 为什么要使用这个函数?

据我所知,curried函数应该总是返回一个函数。但是,在下面的代码中,我相信这个函数返回一个列表。但是当我检查类型时,它看起来像一个curry函数 fun zipWith f xs ys = case (xs,ys) of ([],_) => [] | (_,[]) => [] | (x::xs',y::ys') => (f(x,y)) :: zipWith f xs' ys' 类型: val zipWith = fn :

sml代码中的语法错误

我正在学习sml,并试图制作一个简化逻辑公式的程序。当我试图运行这段代码时,我总是会遇到同样的错误,我无法理解。它总是“错误:语法错误:删除条ID DARROW”。我已附上以下代码: - fun Simplify (Or(True, _)) = True = | Simplify (Or(_, True)) = True = | Simplify (Or(False, False)) = False = | Simplify (Or(x, False)) = (Simplify x) = | S

SML对元组转换

我一直在尝试解决这个成对元组问题,其中输入是一个元组列表,输出是一个列表元组,其中每个元组的第一个元素被分组在一起,并且与第二个元素类似(即[(1,2),(3,4),(5,6)]-->([1,3,5],[2,4,6]) 我想到了这段代码,但它给了我一个错误: fun convert L = foldl (fn ((x,y),(u,v)) => ((u@x),(v@y)) ([],[]) L; 有任何修复建议吗?@连接列表(并且x和y不是列表) 试试(u@[x],v@[y]) 然而,请注

Sml 如何实施某种形式的;“可为空”;标准ML中的类型?

假设在标准ML中定义几个数据类型: datatype color = orange | navy | teal | silver | hsl of real * real * real; datatype direction = east | north | west | south; 然后,我定义一个使用上述数据类型的值: type Cursor = int * int * color * direction; val cursor : Cursor = (0, 0, orange, e

如何";“什么也不做”;在SML中if条件的其他部分

在SML中,我必须使用else部分,因为这是语言的规则 那么,在else条件下,我怎么能什么都不做呢 fun calc(input : string ) : int = let val outStr = ref "someString" val outInt = ref 0 in outInt := (validateHelper(input) handle _ => ~1); if (outInt <> ~1)

Sml 标准ML支持Unicode吗?

标准ML支持Unicode吗 我相信它没有,但找不到任何关于SML的权威文件来说明这种情况 你只需要回答“是”或“否”,但你必须知道一个事实。不要猜测,否则我相信答案。权威链接会更好。不太好。目前标准中的所有功能都是能够使用字符和字符串文本中的转义,并且至少允许Unicode作为char或可选的WideChar.char的基础字符编码。但是标准basis库没有规定对额外的Unicode感知功能的任何支持 特定的实现可能有额外的支持,您可能会发现一些第三方unicode库,但仅此而已(不幸的是,我

SML在OSX小牛上未检测到操作系统

我不能在小牛队上运行SMLNJ 它向我显示了错误 sml: unable to determine architecture/operating system 我还查看了/usr/local/smlnj/config/_arch-n-opsys文件,其中提到了Mavericks 13*) OPSYS=darwin; HEAP_OPSYS=darwin ;; # MacOS X 10.9 Mavericks 有人能帮我吗?你可以用这个重新安装SML,看看问题是否再次发生。thanx。。。它是

我的sml代码有什么问题?

我不知道为什么我的代码不起作用 fun lookup _ [] = 0 | lookup key ((k,v)::entries) = if k = key then v else (lookup key entries) 这就是我在cmd中测试它时发生的情况 val lookup = fn : ''a -> (''a * int) list -> int - lookup (1,[(1,2),(2,3)]); val it = fn : ((int *

Sml mlton给出了与库相关的错误

当我试图用mlton编译一个程序时,我得到了一个错误 ~/projects/serve-sml $ mlton server.mlb In file included from /usr/lib/mlton/include/platform.h:13:0, from /usr/lib/mlton/include/common-main.h:16, from /usr/lib/mlton/include/amd64-main.h:

Sml 我可以用中缀操作符折叠而不写出匿名函数吗?

如果我想添加一个列表,我可以这样做: - List.foldr (fn (x, y) => x + y) 0 [1, 2, 3] val it = 6 : int 有没有办法写一些更符合以下内容的东西: List.foldr + 0 [1, 2, 3] 我试过这样的方法: fun inf2f op = fn (x, y) => x op y; 你很接近。在第二个示例中添加op关键字 - List.foldr op + 0 [1,2,3]; val it = 6 : int 接

如何在sml中写入文件

我试图将一个字符串写入一个文件,但是我似乎无法让它工作,我已经阅读了所有关于堆栈溢出的问题,但似乎没有一个能够解决这个问题。我来自命令式的背景,所以通常我会,写入文件,然后关闭输出流。。。然而,这在sml中不起作用 fun printToFile pathOfFile str = printToOutstream (TextIO.openOut pathOfFile) str; //Here is where the issues start coming in fun printToOut

Sml 莫斯科ML编译器的输出选项

我正在使用mosmlc.exe编译一些.sml文件。问题是,.ui和.uo输出文件放在我的输入.sml文件的同一目录中。我想这样做: mosmlc.exe -o out/ src/file1.sml src/file2.sml 以便在out/文件夹中创建输出文件。但是看起来像是-o选项用于不同的东西(根据)。但是,如果使用这样的选项运行,输出文件将与输入文件创建在同一目录中 如何指定输出文件夹?没有关于这方面的文档,编译器也没有列出编译器选项的帮助选项(非常烦人) 从源代码 通过检查编译器的代

K out on N实现-SML

我试图在SML上实现N中取k,因此“pick(3,[1,2,3,4])将返回[[1,2,3],[1,3,4]…](所有k-size从N个元素中选择) 我使用了List.map,我认为它调用函数并将其应用于每个元素 真的不明白为什么在输入“pick(3,[1,2,3,4,5])”时,它返回一个空列表 我的第一个想法是,这是因为初始条件(选择(,[])=[])) 但是改变它并没有起到很好的作用 签名正常(val pick=fn:int*'a list->'a list) 问题与您的怀疑有关–基本情况

如何在sml中检查列表中的零

我正在努力创建一个函数,该函数将返回给定列表中每个元素的乘积(不包括零)。以下函数将正确返回列表的乘积,但不会排除零 fun mult_nonzero(xs) = case xs of [] => 0 | (x :: xs') => x * mult_nonzero(xs'); 如何添加零检查?您可以直接在函数参数中执行模式匹配: fun mult_nonzero [] = ... | mult_nonzero (x::xs) = ... 正如可以匹配参数

Sml 在ML中处理异常

各位,我正试图了解异常在ML中是如何工作的,但我有一个奇怪的错误,我无法找出问题所在: exception Factorial fun checked_factorial n = if n < 0 then raise Factorial else n; fun factorial_driver () = checked_factorial(~4) handle Factorial => print "Out of range."; 异常

Sml 用值填充ML中的普通二叉树

比如说: datatype bin_tree = Empty | Node of value * bin_tree * bin_tree 我将如何填充二叉树(不是左小于根,右大于根的二叉搜索树)。只需在二叉树的每个节点插入列表中的值。与Java中的问题相同。这可能会有所帮助:) 使用已声明的值构造函数 如果我们暂时假设value是int,那么我们就有了树 1 / \ 2 4 / 3 其代表为: Node (1,

SML元组访问

据我所知,在Simple ML中,元组是通过#ns访问的,以前我见过它工作,但现在它不工作了 我试过下面这句话: val a =#2 ("one", "2", "three") 但它给了我以下错误: first.sml:25.26 Error: syntax error found at EOF uncaught exception Compile [Compile: "syntax error"] raised at: ../compiler/Parse/main/smlfile.sm

SML从std输入读取二进制数据

如何在SML中从标准输入中读取二进制数据?我知道使用 TextIO.inputAll TextIO.stdIn 。。。但是,对于二进制数据的输入流,如何才能做到这一点呢?请看一看。当然可以,但我如何才能使BinIO在stdIn上工作呢?我怀疑将stdIn作为二进制处理是否可以移植。谢谢你们两位的评论。作为一种解决方法,我将把二进制数据编码为base64,然后使用TextIO.inputAll。。。“cat image.tif | base64 |我的sml程序”

Sml 从溪流中读书

我正试图从一个包含 test (注意空格)。目标是获得输出“test”。以下是到目前为止我得到的信息: val test = TextIO.openIn "test.txt" fun stream_rdr stream = let fun get NONE = NONE | get (SOME c) = SOME (c, stream) in get (TextIO.input1 stream) en

(SML)将类型定义为函数并创建此类型的函数

这里的第一个问题,我想先说明一下,我做了几个问题,虽然我发现了多个措辞类似的问题,但我没有发现有人问或回答我的问题(据我所知) 我在SML做一个课堂作业,所以我会留下一些细节,这样我可以自己解决这个问题。我在SML中定义了以下类型: - type Env = string -> int; 本质上,Env类型应该是一个允许从字符串映射到int的函数——这是一个简单的环境方案。创建一个函数来实现这一点非常简单,即: - fun foo (s:string) = 10; (*simple ex

Sml 如何在Windows上访问Poly/ML格式的库?

我已经从“PolyML5.6-64位.msi”安装程序安装了Poly/ML;我可以通过单击“开始”菜单中的REPL来启动REPL;但我不知道如何从它访问任何库?我尝试过使用“something”,但结果如下: > use "Math"; Exception- Io {cause = SysErr ("No such file or directory", SOME ENOENT), function = "TextIO.openIn", name = "Math

Sml (int->;int)是什么意思?

我想解释一下这篇文章的类型选择部分的含义。据我所知,它将一个int,乘以(int->int),再乘以另一个int。我只是对(int->int)的意思感到困惑。任何帮助都将不胜感激 val callcc = SMLofNJ.Cont.callcc val throw = SMLofNJ.Cont.throw type 'a cont = 'a SMLofNJ.Cont.cont type choice = int cont * (int -> int) * int (int->int)

Sml 处理不在数据类型中的变量

我希望完成的是将字符串和布尔值传递到列表中。“开关”运算符切换输入类型的前两个元素,“和”运算符和前两个元素 但是,如果我想“和”一个布尔值和一个字符串,我将如何向列表中添加一个错误字符串(“错误”)?另外,SMl不接受x::y::xs我应该放什么,因为我想切换,而不考虑类型 datatype input = Bool_value of bool | String_Value of string | Exp_value of string datatype bin_op = switch | a

在sml中,关于范围的问题是不明确的

为什么ans的值是9? 在f中,我认为x值被记为2,因为在f(z,w)中,valx是声明的,而x不是声明的 我说得对吗?你对这个问题的措辞表明你是从变量的角度来思考的。SML并不像Java这样的语言那样有变量。它具有可以命名的值。在val x=2中,值2绑定到名称x。在这一点上,x和2之间没有真正的区别。这是因为SML是一种函数式语言,它强制在任何表达式中变量可以被其值替换,而不改变表达式的含义。因此 val x = 2 fun f (z,w) = x + z + w val z = 3 val

SML的文本编辑器和编译器

我们应该使用哪个文本编辑器和编译器分别编写和执行我们的程序? 我是一个完全的初学者,在编程方面没有太多经验。你可以用任何你喜欢的编辑器编写代码,它对编译没有影响 要编译SML,您有几个选择(但不限于): Visual Studio(请参阅) 这是否回答了您的问题?这是我在SML的第一天,我怎么能走这么远?

Sml 使用foldr返回列表的后缀

我需要返回列表的后缀,但似乎无法解决它 给定一个列表[1,2,3],函数应该返回[[3],[2,3],[1,2,3]]。我们应该使用foldr和一个辅助函数来求解。Haskell应该是: suffixes = reverse . foldr f [] where f y [] = [[y]] f y (yss@(ys:_)) = (y:ys) : yss 我不知道SML,但解决方案应该类似以下是@Landei的SML语法解决方案: fun suffixes xs = let

Sml 以ml表示的实数类型的减法函数

我试图在moscow ml中减去两个函数(都是real类型的函数)。然后它说“重载-不能应用于real->real类型的参数。那么我应该如何编写函数呢 fun CircleArea x = x*x*Math.pi fun SquareArea x:real = 4*x*x fun Area x = SquareArea - CircleArea 实际上,您可能不想从一个函数中减去另一个函数,但这些函数一旦应用,其返回值就会被删除。您可以通过以下方式实现此目的: fun Area x =

SML,未绑定变量或构造函数

这是我的代码,它不断给我未绑定的错误消息 事实上,我对SML还是个新手。所以,我真的不知道如何修复它 似乎使用a和b是件坏事 我试图声明a和b 像这样 a : int; b : int; 但还是不行 如何解决这个问题?这只是语法问题。您缺少的所有代码都是一个用于分隔计算的子句的。只需在第5-8行的开头添加一个 这只是一个语法问题。您缺少的所有代码都是一个用于分隔计算的子句的。只需在第5-8行的开头添加一个 除了Andreas提到的函数子句之间缺少的|之外,您不能将+、-、*和div运算符应用

Sml 写ML函数

我是ML的新手,所以我正在尽力去理解 编写一个名为alternate:'a list->'a list的ML函数,该函数将两个长度相同的列表作为输入,并生成一个输出列表,其元素分别从第一个和第二个输入列表交替获取 示例 alternate ([1,3,5],[2,4,6]) = [1,2,3,4,5,6] 这是我的工作:fun alternate(x::xs,y::ys)=x::alternate(x,y)将问题分为两部分:递归案例和基本案例。(1) 在递归的情况下,您可以解决问题的某个单

SML列表[1,2,3,…n]

我需要创建一个列表[1,2,3…n],而不使用预先实现的列表函数。我可以通过写以下内容将列表倒排: fun makeList(x : int) = if x = 0 then [] else x :: makeList(x-1) 如果输入4,我可以反转它并得到[1,2,3,4]。如何仅在一个函数中执行此操作?您已在一个函数中创建了反向列表,但未使用列表库 要使其顺序正确,可以使用累加参数: fun makeList 0 result = result | makeList n resul

Sml ML-数据类型和函数

我们有第二天的时间键入: datatype complex = Rec of real * real | Polar of real * real; 和两个功能: - val real = fn (Rec(x,y) ) => x | (Polar(r,a)) => r * Math.cos(a); val real = fn : complex -> real - val imaginary = fn (Rec(x,y) ) => y | (Polar(r,a)

以编程方式加载sml/nj中的代码

我尝试加载一个外部.sml文件,比如说a.sml,然后执行这个文件中列出的fun(add:int->int->int) 我完全知道如何在交互式shell中做到这一点:使用“a.sml” 但是如何在.sml文件中实现这一点呢?我尝试了以下方法: val doTest = let val _ = print ("Loading..." ^ "\n") val _ = use "a.sml" val _ = print ("1 + 2 = " ^ Int.toString

如何确定SML中递归函数的变量?

我在理解SML中的变量以及如何确定递归函数的变量时遇到了一些困难。我得到了解释: (递归)函数的变量是函数参数上的任何表达式,它接受某个集合中的值,从而 A是(完全)有序的;此外,A中没有无限的下降链v0>v1>…和 对于任何递归调用,变量都会严格减小。” 但这对我帮助不大。一个更具体的例子会更好 假设递归函数生成一个长度为n的列表,其中所有元素均为零 这可能看起来像这样: fun foo 0 = [] | foo n = 0::(foo (n - 1)) 在这种情况下,变量是函数的参

当'type variables'出现在SML中的'val'声明语句中时,它们是什么意思

在SML/NJ repl中,接受以下表达式: - val 'a a = []; val a = [] : 'a list - val 'a a = 1; val a = 1 : int 这里的'a是什么意思?我不知道它们会产生什么影响,这是在定义中定义的,但我在标准ML的编程中找不到相关的描述 求你了 由val绑定的类型变量只有在使用它们时才相关。您可以使用它们强制(或限制)多态性,例如 fun 'a pair (x : 'a, y : 'a) = (x, y) 它是 val 'a pair

如何在SMLNJ中创建三元树?

现在,我在SMLNJ中建立了一个二叉树模型,但是我想把这个模型改为在树的内部有一个树。(三叉树) 如果从二叉树的根开始 Binode with an (id1*(binode)) ß- a binary tree 然后,如果该“binode”作为元组的一部分定位:2Dbinode 该元组有一个标识符,其中的二元组是二元组树的根 2Dbinode (id2* (binode) *2Dbinode) 每一个都是3Dbinode的一部分,3Dbinode包括: 3Dbin

SML函子可以接受非结构参数吗(Ullman 8.3.4)?

我只是想检查一下我的理解,我正在复习ML编程元素的函子一章,其中一个问题是需要编写一个“只接受整数b作为输入”的函子。我可以编写一个函子,应用如下: structure HashFn100 = MakeHashFn(struct val i = 100 end); 但不是 structure HashFn100 = MakeHashFn(100); 正如问题陈述所暗示的那样。这句话是不是让我和我的当前函子混淆了?是不是有办法将函子应用于我缺少的非结构?不幸的是,本练习在解决方案手册中没有答案

Sml 在标准ml中定义嵌套函数

我是sml的新手。我试图将int转换为int-list。例如,假设有一个输入1234,那么输出是一个类似于[1,2,3,4]的列表。我的问题是,如何在sml中键入嵌套函数?让我们进去吧?这是我的密码 fun digit (a : int): int = let fun size (a) = if a < 0 then nil else x = Int.toString x then digit s = size(x

为什么这会导致溢出错误?(SML)

这段代码产生了一个溢出错误,我不能完全确定原因。这是在SML,我有点不熟悉的时刻,所以我不完全知道如何修复它 fun detPrime(num:int, divn:int) = if divn = num then true else if num mod divn = 0 then false else detPrime(num, divn+1); fun prime(num: int) = detPrime(num, 2

(sml)I';我将制作一个函数,用Lisp表示法漂亮地打印字符串树

事实上,我不知道“lisp符号”到底是什么意思。 所以我试着让它尽可能类似于列表格式,但我不能像一个例子那样表达它,因为()或(,)看起来是一样的。 我如何表示一个类似于示例的列表 我的sml代码: 数据类型“a Tree=null |树列表的树| a的叶 有趣的prettyprint(null)=[]| prettyprint(leaf(v))=[v]| prettyprint(Tree(h::t))=prettyprint(h)@prettyprint(Tree(t))| prettyp

Sml 抽象数据类型

我试图在标准ML中使用抽象数据类型。例如,我可以通过将两个结构定义为队列来编写一个签名队列和两个队列实现: signature Queue = ... structure AQueue :> Queue = ... structure BQueue :> Queue = ... 现在,我想为队列编写通用函数/值,不管我使用哪个队列(AQueue或BQueue)。例如,我想写以下内容: val double1 = Queue.enqueue (1, Queue.enqueue (1,

  1    2   3   4   5   6  ... 下一页 最后一页 共 9 页