Sml 如何在标准ML中创建惰性树

我想在标准ML中用 datatype tr = N of int * unit->tr * unit->tr; 我试着用 fun form k = N(k,fn()=>form(k+1),fn()=>form(k+3)); 作为对概念的测试,我收到了错误消息,说类型不匹配 在ML中实现懒惰树的正确方法是什么 datatype tr = N of int * unit->tr * unit->tr; 这被解析为 datatype tr = N of (in

打开SML文件-使用失败

我用以下命令在“新泽西州的SML”中打开了一个文件:使用“c:\\work.SML”,它给了我下一个问题: [openning c:\\work5.sml] [use failed: Io: openln failed on "c:\\work.sml", Win32TextPrimIO:openRd: failed] uncaught Exception error raised at:../complier/TopLevel/interact.sml:24.14-24.28 在work.s

SML-如果';s条件与一些;或;

我想做一个这样的if条件: if ((head(c) = 1) or (head(c) = ~1) or (head(c) = ~5) or (head(c) = ~17) or (head(c) = 0)) count +1 else.. 函数头返回“a” 它给了我下一个错误:运算符不是函数[tycon dismatch] 接线员:布尔 表达 有什么问题?谢谢。我想它在SML中被称为orelse。对于这个例子,你也可以写: let val h = head c in if List.ex

Sml let-in表达式中的错误代码

我有这个SML代码。我不知道为什么我不能编译这个: fun score = let val sum = 3; (* error at this line : SYNTAX ERROR : inserting LPAREN *) if sum div 2 > 0 then sum = 0 else sum = 1 (*some other code*) in sum (* I want to

Sml 需要提示(而不是代码)将此递归函数转换为尾部递归函数吗?

我有一个函数,它获取一个字符串列表和一个字符串,然后返回每个列表中包含已传递字符串但未传递字符串的所有元素的列表 myfilter([[“a”、“b”]、[“c”、“d”]、[“e”、“a”、“x”]、“a”)->[“b”、“e”、“x”] 现在你们可以看到这是一个递归函数,我想把它转换成一个尾部递归函数。我熟悉尾部递归的示例,但我不知道如何在上面的函数中实现它当您认为尾部递归时,接下来您认为应该是“累加器” 函数不是尾部递归的原因是它必须调用自身以获得某些结果,然后对该结果进行处理。如果我们可

SML中的Curried匿名函数

我有下面的功能,它可以工作: (fn x => x * 2) 2; 但这个不起作用: (fn x y => x + y ) 2 3; 谁能告诉我为什么?或者给我一些提示让它工作起来?(fnx=>fny=>x+y)23工作fn只是没有与fun相同的语法糖来定义咖喱函数。在标准ML中,函数只能有一个参数,因此使用 (fn (x,y) => x + y) (2,3) 类型是 fn: int * int -> int 此时(x,y)和(2,3)是一个列表结构,上面给出

Sml 如何获取教会数字的前置词

我正在练习SML,我正在做一个小任务,我们必须实现教会数字,定义为: datatype 'a church = C of ('a -> 'a) * 'a -> 'a 示例val ZERO = C(fn (f,x) => x) 我已经实现了以下功能: create: int -> 'a church churchToInt: 'a church -> int 和SUC,返回教堂数字的后继数字 现在我必须实现这个功能 PRED: 'a church -&

SML:创建抽象数据类型

我正在为分数和分数编写一个简单的抽象数据类型 我甚至不能让构造函数工作,我只是对SML语法非常迷茫 signature fracs = sig type fraction exception zero_denominator (* constructor *) val // : int * int -> fraction /********************************************************************************

查找SML NJ对立面是否存在重复项

关于一个老问题,如果我想要相反的结果: [1,2,2,3,4,5,6] should return false [1,2,3,4,5,6,7] should return true [1,2,3,4,5,6,1] should return false 我怎样才能拥有它: fun duplicated [] = false | duplicated (x::xs) = (List.exists (fn y => x = y) xs) orelse (duplicated xs) 比如说

Sml 解决模块名称冲突时,需要获取ORD_映射签名

我正在一个相对较大的SML代码库上工作。它最初是用MLton编写的,但我现在在SML/NJ下使用它。我需要使用RedBlackMapFn,它是在smlnj lib.cm中定义的。但是,我得到一个错误: elaborate/elaborate-bomenv.fun:9.20-9.27 Error: unbound signature: ORD_KEY elaborate/elaborate-bomenv.fun:14.21-14.40 Error: unbound functor: RedBlac

在SML中引发异常编译

我已经用SML编写了下面的代码,但是我遇到了编译错误 fun getTransIndex(t : TRANSACTION, (h::L) : TRANSLIST) : int = let val i=0 in if (h=t) then i else if (getTransIndex(t,L)<>~1 then getTransIndex(t,L)+1 else ~1 end getTr

SMLNJ-函数本身工作,但不在另一个函数内工作

我有这个功能: addBinaryTreeNode((genRandomNumber(100), genRandomNumber(100), genRandomNumber(100)), tree, 1, []) generate3DNodeTree(addBinaryTreeNode((genRandomNumber(100), genRandomNumber(100), genRandomNumber(100)), tree, 1, []), numToGen - 1) 返回数据类型bi

Sml 返回列表中出现的次数

我正在尝试创建一个SML函数,它接受布尔值,并返回“true”出现在列表中的次数 fun truecount(lst) = foldl (fn (x,y) => if x=true then y+1) 0 lst; 我觉得我可能在正确的道路上,但我似乎不能完全正确。如果有人知道怎么做,请告诉我 那么,你的匿名功能是什么 fn(x,y)=>如果x=true,则y+1 当x不是true时返回 该怎么办 因此,如果。。。然后…让它进行编译?好吧,你是说我遗漏了一条else语句。应该是什么?你为

sml中的foldl能否处理字符串列表中的元素并返回另一个列表?

如果不是,如果我想用预定义函数修改列表中的元素,并在最后用一行代码返回一个列表,该怎么办 例如: fun upperClass是一个预定义的函数string->string,它使string中的所有字符都是大写的,这里我有一个列表[“a”、“b”、“c”] 我想用foldr return[“Ä”,“B”,“C”]非递归地编写这个函数 我之前的尝试是foldr upperClass()[“a”、“b”、“c”],结果与预期的类型不匹配,因为我通常使用OP::将这些元素放回到列表中。让我们看看列表的

从字符串中删除字符的SML程序

我是SML的新手,尝试编写递归程序来删除字符串中的字符: remCharR: char * string -> string 到目前为止,我编写了这个非递归程序。需要帮助写递归的一个 - fun stripchars(string,chars) = let = fun aux c = = if String.isSubstring(str c) chars then = "" = else = str c = in =

Sml 从战术应用程序查看验证步骤

我花了一些时间使用HOL中的定理库构造“正向证明”。我现在希望能够运用战术来“向后证明” 我想知道是否有一种方法,在应用了一种策略之后,可以查看该策略应用的定理列表,即详细地重构正向证明。这主要是为了帮助我理解战术是如何工作的 例如: > g `x = 5 ==> 2*x = 10`; val it = ... > e (rw[]); OK... . . . |- x = 5 ==> 2 * x = 10: proof > > > list_steps

如何在sml中将函数的参数从int转换为实?

这是我在sml中编写的用于计算谐波和的代码。我基本上想计算实数 至于整数,所有的计算结果都是0,没有任何用处。但这段代码给出了错误 试验1: if y<x then 0 else f(x,y-1)+ 1/y; 试验2: if y<x then 0 else f(real(x),y-1)+ 1/y; 甚至用0.0替换0也不起作用。请帮忙。我得到了问题的答案。 我们基本上需要使用 if y<x then 0.0 else f(x,y-1)+ 1.0/rea

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 输出在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中的两个函数F(x)和G(x),哪两个函数必须返回与F(x)==G(x)相同的值,其中1 int -idenfg; val it=false:bool -funfx=x*x; val f=fn:int->int -fun g x=如果x int -idenfg; val it=true:bool 由于测试所有输入的两个函数(程序)是否相等是不可计算的,因此您的iden函数可能需要更多的参数,而不仅仅是其比较的两个函数 通常,您的iden将是: - fun iden f g

SML-递归数据类型与多态数据类型

有人能解释一下他们之间的区别吗 此外,在试用时: 口译员给出: val my_exp_2 = Pair (Const 1.2,Pair (Const #,Const #)) : exp 为什么会出现#符号 谢谢 递归数据类型是一种数据类型,它在定义中使用自身 例如: datatype intlist = IntNil | IntCons of int * intlist 注意intlist是如何在IntCons值构造函数的定义中使用的 val ls = In

每月练习次数(SML中多个列表的迭代)

我在SML中有两个列表,比如列表A[(A,b,c),(d,e,f)]和列表b[b,e]。我想计算B中每一项与A中每三元组的第二个元素相匹配的出现次数。输出应该是2。因为b和e每一个都在A中出现一次 到目前为止,这是我的代码,但当我在B中从一个元素移动到另一个元素时,我的计数器总是设置为0。我知道在Java中,这只是一个简单的双for循环 fun number_in_months (d : (int * int * int ) list, m : (int) list) = if nul

Sml 数字中的位数

我正在尝试用SML编写一个函数,它接受一个整数并输出该数字的位数。例如,用户输入122,我想输出3。我原以为这个函数会起作用,但我在子句不一致的结果约束方面遇到了一些错误。右边不一致,运算符和操作数不一致。我对ML很陌生,我不知道我做错了什么!提前谢谢 fun num_digits nil = nil | num_digits 0 = 1 | num_digits n = let val x = 1 fun f(z, a) =

Sml 检查参数是否为列表

在SML中,如果参数x是一个列表,是否可以编写一个返回true的通用函数 fun isList(x) = ....... 预期用途: - isList(4); (* returns false *) - isList([1, 2, 3]); (* returns true *) 在SML中,如果参数x是一个列表,是否可以编写一个返回true的通用函数 fun isList(x) = ....... 没有 您可以尝试进行模式匹配,然后处理适当的异常。但无论哪种方式,这都违背了函数式编程的

Sml 为什么一个折叠尾是递归的而另一个不是?

为什么第一个是尾部递归的而另一个不是 我认为它们都是尾部递归的。第一个是尾部递归的,因为递归调用(对fold1)出现在函数体的末尾(它形成了“尾部”): 首先调用f(acc,hd),然后将结果(连同f和tl)传递到fold1。这是函数所做的最后一件事;递归fold1调用的结果传递给调用方 第二个不是尾部递归,因为递归调用(对foldl2)不是函数的最后一个操作: fold1 f (f (acc,hd)) tl 首先调用fold2 f acc tl,然后从结果和hd生成一个元组,然后将该元组传

在smlnj中设置并发ML

我正在尝试让Concurret ML在SMLNJ中运行。我看到一篇关于使用CM.make来做这件事的帖子,但我在我的系统上找不到CM.make文件。请告诉我如何解决这个问题。我可以直接加载库。例如,在我的情况下,我可以 sml /opt/smlnj/cml/src/cml.cm 知道库的位置后,可以使用CM.make。例如,在我的回复中,如果我这样做 CM.make "/opt/smlnj/cml/src/cml.cm"; 它加载CML库。如果我这样做,则使用任何一种方法: val r =

Sml 使用参数化分隔符标记字符串

我需要根据delimeter将字符串标记为标准ML中的单词列表,delimeter将作为函数参数传递。这是我目前掌握的代码: val splitter = String.token(fn (c:string,x:char) => c=x); 我试过了,但我知道它错了。请帮我修改。c的类型是string,而x的类型是char。它们是不可比的。可以使用Char.toString将x转换为字符串 splitter = String.token(fn (c:string,x:char) =&g

标准ML:如何使用mosmlc编译ML程序?

我想用mosmlc将我的ML程序编译成一个可执行的二进制文件。然而,我找不到多少关于如何做的信息 我想编译的代码在这里 cx、cy、s、imgLocation是我想从命令行参数中获取的4个参数。例如,如果程序使用名称mandelbrot编译,则输入bash$mandelbrot-0.50.15 0.0099 image.png应执行主函数。您应能够将此代码放入文件foo.sml,然后运行 mosmlc -P full foo.sml 要获取所需的命令行参数,请使用函数CommandLine.a

Sml 如何使将数据写入文件的函数给出布尔输出?

我必须编写一个代码,将整数列表写入一个文件。同时,如果元素已写入,则返回true;如果未写入,则返回false 我写了这样的东西 fun writetofile([],sfile)= false |writetofile((l:int)::ls, sfile)= let val outs=TextIO.openOut(sfile) fun writeinline(outs,[])=(false;TextIO.closeOut(outs)) |writeinli

如何在SML中映射字符串中的每个字符

我有一个函数foo,它接受一个字符。我想将该函数映射到字符串中的每个字符上 fun foo (ch : char) = ch; fun bar (str : string) = map foo [(str)]; 显然,这将不起作用,因为一个字符串应用于一个需要字符的函数。因此,我尝试使用String.explode(str)将其分解为一个字符数组,但似乎无法映射数组中的每个字符并将该字符应用于foo函数 fun foo (ch : char) = ch; fun ba

Sml 在定义curry样式函数时,是否可以声明参数的类型?

如果我使用元组样式参数定义函数,我可以定义参数类型和返回类型: fun hello(name:String, code:int):String = "hello!" 但如果我使用咖喱风格,我只能这样做: fun hello name code = "hello!" 是否可以为后面的类型添加参数类型或返回类型?确实可以: fun hello (name : string) (code : int) : string = "hello!" 但是,在标准ML中很少需要或使用类型注释,因此最常用的

在SML中编写多个函数-顺序组合

我想了解顺序组合是如何比我现在在SML中做得更好的。我必须编写一个程序,获取一个整数列表,并将索引为零的整数移动到列表中的最后一个索引。即[4,5,6]->[5,6,4] 我现在掌握的代码是: - fun cycle3 x = = if length(x) = 1 then x = else (List.drop(x, 1); = x @ [hd(x)]); val cycle3 = fn : 'a list -> 'a list 问题在于我的else语句,我想做的是首先将第一个术语连接

SML记录子集和更新

是否有一种更直接的方法(并且由于维护和涉及的编辑量而不容易出错)来实现以下相同的目的,即:1)根据感兴趣的成员的名称列表获取记录元素的子集,2)使用子集记录的名称从子集记录更新记录 val r = {a = 1, b = 2, c = 3, d = 4, e = 5} val s = {b = #b r, c = #c r, d = #d r} val r = {a = #a r, b = #b s, c = #c s, d = #d s, e = #e r} 我所期望的可能是这样的: val

Sml 从Poly/ML中的源代码字符串获取解析树

我正在尝试编译一个源代码字符串,并使用Poly/ML打印解析树。以下代码已编译,但解析树为空: fun main () = let val stream = TextIO.openString "let val a = \"abc\"; val b = \"def\"; val c = a ^ b in print c end"; val _ = PolyML.compiler (fn () => TextIO.input1 stream, []);

SML检查两项是否在同一列表中

如何检查sml中是否有两项在同一列表中?我尝试更改成员函数,但无法使其工作 val routeList1 = ["Princes Street", "Haymarket", "Craiglockhart", "Musselburgh", "Stoneybank"] 如果要检查“Princes Street”和“Haymarket”是否都在路线列表1中 我不熟悉这门语言,因此任何帮助都很好要检查Princes Street是否在routeList1中,您可以写: List.exists (fn

Sml 删除列表的第i个元素

编写一个函数,删除列表的第i个元素。如果列表的长度小于i,则返回列表 这是所需的输出: - deleteIth([1,2,3,4,5,6],3); val it = [1,2,4,5,6] : int list - deleteIth([1,2,3,4,5,6],7); val it = [1,2,3,4,5,6] : int list 这是我的密码: fun deleteIth (L, i) = let (* Deletes the element of a lis

在SML中如何将实数四舍五入到第n个小数点?

SML新手,尝试通过声明函数舍入(n,L)将实数舍入到第n个小数点,其中L是实数列表,n决定可以舍入到的第n个小数点 我的方法是先将实数转换为字符串,然后将子字符串转换为第n个小数点,然后将子字符串解析回实数,如果我只想将实数转换为第n个小数点,这很好,但是如果我有一个像0.3456这样的数字,我想将其四舍五入为0.35,我的方法就无法真正实现这一点 fun rd(_,[]) = [] |rd(a:int, x::y:real list) = if x>0.0 then Option.ge

SML:从具有每个元组的第二个元素的元组列表创建一个列表

您好,我是SML的新手,我一直在尝试编写一个函数,该函数作为参数获取一个列表(在我的例子中是list prussia),该列表包含两个int和一个字符串的元组,我的函数必须创建一个列表,其中包含列表中出现的所有年份,不重复(列表中每个元组的第二个元素)。我必须创建两个函数(append_如果_new需要列表中的一年时间并将其添加到列表中,它就会工作),而year必须为列表中的所有元组执行此操作,我尝试使用foldl,但我得到了tycon不匹配 警察局。要做到这一点,我必须使用功能映射、过滤器或折

Sml 具有内部状态的简单函数

我想写一个具有内部状态的最小函数。 它应该有签名f:()->(),第n次调用它时应该打印数字n 我认为引用是必要的,但我不知道如何使用它们来实现这样的功能。我找到了一个带有外部局部引用的解决方案 local val mem = ref 0 in fun f () = let val _ = mem := !mem + 1 in print (Int.toString (!mem)) end end 一个稍微不同的问题的解决方案是生成函数 fun iter_int n = let val

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