我写了一个函数,它可以正常工作,但我不明白为什么输出是这样的
功能:
测试:
输出:
这只是一个输出限制(是的,这是令人困惑的)-默认情况下,顶级(交互式shell)中值打印输出的深度限制为相当小的数字(即5)。跳过的部分用#打印
您可以使用printDepth变量覆盖此深度(至少在SML-NJ中):
Control.Print.printDepth := 1024;
顺便说一下,这里不需要单独的do_xor和局部函数,只要
fun xor(alpha, beta) = Or(...);
可
我刚刚开始学习SML,还在理解它的错误信息
尝试输入下面的函数定义时
val rec : real->real = fn 0.0 => 0.0 | n:real => 1.0/n;
我得到以下错误:
stdIn:25.9-25.17 Error: syntax error: deleting COLON ID ARROW
stdIn:25.24-25.33 Error: syntax error: deleting FN REAL DARROW
stdIn:25.38 E
我想让用户输入一个变量,检查它是实数还是整数,并对相应的操作执行两种不同的操作。如果整数为false,则说true
fun realorinteger(n)=如果n=int,则为true,否则为false
但它肯定不起作用。我也尝试了int中的if n
有什么帮助吗?您不能这样做
类型系统根本不允许一个函数采用多种不同的类型,并根据其类型进行操作。您的函数要么采用int,要么采用real。(或者两者都需要,但也可以使用strings、lists等…即是多态的)
您可以通过创建数据类型来伪造它,该
我正在努力实现SML中的嵌套if-else表达式。任何人都可以突出显示它的语法。假设有三个条件C1,C2,C3,我需要在C代码中等价于下面的条件
if (C1) {
return true;
}
else {
if(C2) {
return true;
}
else {
if (C3) {
return true;
}
else {
retu
在函数中,取
fun TAKE (xs,0) = []
| TAKE (NIL, n) = raise Subscript
| TAKE (CONS (x,xf),n) = x :: TAKE(xf(), n-1);
什么是xs,x,xf?
您还可以告诉我take函数是如何工作的吗。您的take函数似乎是在某种类型的数据结构上运行的,例如
datatype 'a stream = NIL | CONS of 'a * (unit -> 'a
我对SML中的以下代码有问题:
fun inter s1 s2 =
let
fun inter' [] _ interSet = interSet
| inter' _ [] interSet = interSet
| inter' (x1::s1) (x2::s2) interSet =
if x1=x2 then
inter' s1 s2 (x1::interSet) (* Add the valu
这是Coursera的ProgLang课程的家庭作业,但截止日期已经过了,我只是在审核。这是一个非常便宜的问题,但看起来我不能在SML中这样做
给定一个日期3元组int和一个int的列表,返回该int与元组(月份)的#2匹配的频率
起初,我有很多[tycon失配],然后就开始使用函数头。我不知道如何表示元组列表,基本上就是这样
fun number_in_month (date : [int*int*int], month : int) : int =
if hd date = []
then
我对SML代码非常陌生,我正在尝试创建一个函数,返回用户给定的所有素数的列表。我的大多数函数都在工作,除了我不断在我的number、index和lst变量上得到一个未绑定变量或构造函数错误。代码应该使用两个助手函数来运行两个索引,并将它们相乘,从而从列表中取出非素数。这是我的密码:
fun removeMult (lst,n) = if null lst then lst else if hd lst mod n = 0 then removeMult(tl lst, n) else (hd
如果有人能在这里指导我,我将不胜感激,我真的想知道我做错了什么,为什么
这是我的代码:
fun get_longest xs = foldl((fn (x ,y ) => if String.size x >= String.size y then x
else y),[],xs)
我的函数应该获取字符串列表并返回最长的字符串;如果列表为空,只需返回[]
但我得到了一个错误:
Error: operator and operand don't agree [tycon misma
标签: Sml
read-eval-print-loopsmlnj
我正在寻找在SML/NJ REPL中工作的完整命令列表,如Ctrl-Z。我在这里、谷歌和SML/NJ网站上搜索过,但什么都找不到,甚至连我已经知道的都找不到
明确地说,我不是在寻找SML语言参考,只是寻找REPL接口命令。Ctrl-Z(我假设在Windows下)不一定是SML命令。它相当于冷却控制台实例。它意味着文件的结束。在Win下,您可以使用以下命令查看此行为的简单应用程序:
copy con text.txt
这会将字符从键盘(con)复制到文本文件。许多REPL只是使用相同的机制/理解
我是SML的新手,我写了一个程序,花了两年时间比较它们,然后花了两个月时间比较它们,最后是两个日期
我遇到的问题是,如果一年比第一年早,它应该停止并为假,但有些人不确定这是我的逻辑还是什么,它会继续检查月份,然后再检查日期,然后返回真或假
我希望它只检查月份,如果年份是假的,只检查日期,如果月份是假的
fun is_older(year1 : int, month1 : int, day1 : int, year2 : int, month2 : int, day2 : int) =
if y
我试图在SML中实现一个递归调用函数。我的代码是
CM.make "$cml/cml.cm";
open CML;
fun sender n()= if (n<100)
then
(
TextIO.print (Int.toString(n)^"\n");
sender n+1
)
else
exit ()
fun main () = let
val _ = spawn (sender 3);
val tid1 = getTid();
in
TextIO.pri
如何传递字符串并将其转换为sml中的单词列表
例如:“一二三”到[“一”、“二”、“三”]您可以(也可能应该)使用字符串。令牌:
- String.tokens Char.isSpace "one two three";
> val it = ["one", "two", "three"] : string list
还有String.fields。它们对待连续/多余分隔符的方式不同:
- String.tokens Char.isSpace " one two three ";
我正在用ML实现一个AVL树,我很难实现删除操作
datatype 'a AVLTree = Nil | Br of ((int*('a))*('a AVLTree)*('a AVLTree));
datatype Balance = RR | LR | LL | RL;
exception NotFound;
exception NullValue;
到目前为止,我得到的是:
fun remove(Nil, _) = Nil
| remove ((Br((i,vi)
如何在sml中将数组类型转换为列表类型。我已经搜索了列表和数组结构函数,但没有找到一个这样做的函数(尽管有一个列表到数组的函数)
列表结构说明:
阵列结构说明:
似乎没有内置的列表。fromArray或数组。toList。看来定义它的最简单方法是
List.tabulate(Array.length(arr), fn i => Array.sub(arr, i))
所以
虽然没有内置的直接转换功能,但您可以使用Array.foldr轻松构建相应的列表:
fun arrayToList
我是SML的新手。我试图检查二叉树中是否存在给定的值。下面是代码片段。在执行时,它给出
Warning : match nonexhaustive (n,Node (t1, j, t2)) => ...
我不明白为什么会这样。我想我已经涵盖了所有可能的案例。任何人都可以给我提示或链接,这将有助于删除此警告
datatype inttree = Empty | Node of inttree * int * inttree;
(*find(n,K) here n is the key t
如何在标准ML中编译多个文件?我有两个文件
file1.sml:
(* file1.sml *)
datatype fruit = Orange | Apple | None
(* file2.sml *)
datatype composite = Null | Some of fruit
和file2.sml:
(* file1.sml *)
datatype fruit = Orange | Apple | None
(* file2.sml *)
datatype composite
我可以在签名中使用类型之前的类型和签名中的类型专门化签名中的类型吗?以下是一个例子:
signature A = sig
type t
type s
end
我可以通过以下方式专门化A
signature B = A where type s = t list
SML/NJ和Mlton都抱怨t未绑定。不,这确实不能直接完成。原因是相当技术性的,在一般情况下很难将良好的语义归因于这样的操作
您可以通过引入另一个辅助类型来获得最接近的结果:
signature B =
sig
ty
我正在为一个MOOC编写这个函数。它的任务是从列表中删除一个字符串,并返回该列表,而不将该字符串作为SOME或返回NONE,因为该字符串不存在。
我编写了下面的代码,但每当我尝试运行它时,都会出现以下错误:错误:模式中的参数应用了非构造函数:-
运行它的一个测试在哪里:
val test01-01 = all_except_option ("string", ["string"]) = SOME []
编辑
忘了包含为简化类型而提供给我们的同一个_字符串函数
fun same_string(s
sml中是否有一个trie实现,它从输入中获取一个数字,然后将数字分解为数字并插入到trie中?它是一个已经开发的结构还是有一些已经存在的代码可以使用?它有查找功能吗 快速搜索标准ml trie会得到以下两个最重要的结果:
这不是以一种有助于教育目的的方式写的。实现的主要内容是在中,其中参数化了键和元素类型,因此您可以将其专门化为某种数字类型
这是一个很容易消化的单一文件。此实现假定键是字符串。你可以用数字来代替它,毕竟它会分解字符串,所以在结构的内部只是字符列表,这也可能是int或b的列表,在
我希望能够操作嵌套列表中的项目,例如[[1,2,3],[4,5],[6,7]
fun f (nil, _) = nil
| f((a :: b), rest) = a;
我写上述内容只是为了能够访问第一个列表中的第一个元素,但它给出了这个错误
stdIn:29.1-29.28 Error: operator and operand do not agree [tycon mismatch]
operator domain: 'Z list list * 'Y
operand:
我必须为接收此数据类型的字符串编写一个函数
datatype prop = Atom of string | Not of prop | And of prop*prop | Or of prop*prop;
并返回一个字符串
范例
展示
星期六,晚上=
周六和晚上
我的功能正常,但我有两个问题
翻译告诉我->警告:匹配非穷举
我认为我可以为所有类型编写带有局部函数的函数,而不是,和,或,避免重复代码,但我不知道如何编写。
这是我的密码
datatype prop = Atom of stri
如果我想检查输入,以便立即获取最后一个元素,是否有一种正则表达式形式:
有趣的函数(firstElement::MiddleOfList::LastElement)
因此,我可以获取最后一个元素在列表结构中,似乎有一个最后一个函数用于列表;这就是您需要的吗?您无法通过模式匹配来查找SML列表中的最后一个或中间元素
SML列表是一个链表,这意味着如果要查找元素x,必须首先访问它之前的所有元素
但是,您可以使用库函数以类似以下方式查找中间元素:
fun someFunction list =
标签: Sml
sequencessmlnjmlinfinite-sequence
我必须编写一个函数,该函数接收一个序列(有限或无限),并返回一个相同的序列,唯一的区别是,如果在序列期间发生异常,则该函数将序列返回到其开头。
换句话说,函数必须返回一个循环序列,该序列在结束时重复自身。
我必须用句柄捕获异常。
下面的示例必须有效
listToSeq[1,2]
val it=Cons(1,fn):内部序列
重新启动它
val it=Cons(1,fn):内部序列
跟踪它
val it=Cons(2,fn):内部序列
跟踪它
val it=Cons(1,fn):内部序列
跟踪它
我正在努力理解文本,以便逐行写入和读取文件。大多数在线资源一开始都没有介绍性文本。我以前没有任何文件处理方面的知识,也没有SML方面的高级知识。如果需要的话,我不知道如何处理签名
任何链接或详细描述都会有很大帮助
谢谢。也许这会对你有所帮助
字符选项中的类型是什么?更多详细说明会有所帮助。我需要打开一个文件来读/写吗?
标签: Sml
smlnjcontinuations
我想在这里写一个延拓函数。此代码是设计用于执行机器指令的较大代码的一部分。此代码的功能是将抽象语法代码转换为机器代码。下面是一组机器代码指令,它从堆栈中取出两个操作数执行操作并将结果推送到堆栈
type VAR = identifier
type code = instruction list
type environment = identifier list
type EXPR = environment -> code * environment
fu
我正在完成一项任务,并被赋予以下职能:
fun label (lb,ub) =
let val s = callcc (fn k =>let fun branch c = if (c < ub)
then (pushCP (k,branch,c+1);c)
else ub
我想知道人们是如何在SML/NJ编译器中处理非穷举匹配警告的。例如,我可以定义一个数据类型
datatype DT = FOO of int | BAR of string
然后有一个函数,我知道它只接受FOOs
fun baz (FOO n) = n + 1
编译器将发出警告
stdIn:1.5-1.24 Warning: match nonexhaustive
FOO n => ...
val baz = fn : DT -> int
但这会使代码变得混乱。在这种情况
我需要创建一个绑定到标准输入流的lexer的新实例。
然而,当我输入
val lexer = makeLexer( fn n => inputLine( stdIn ) );
我收到一个我不理解的错误:
stdIn:1.5-11.13 Error: operator and operand don't agree [tycon mismatch]
operator domain: int -> string
operand: int -> string
我试图计算前n个数的平方和。代码如下:
fun sumSq 0 = 0 |
sumSq x = x + sumSq(x * x-1);
我收到一个未捕获的异常溢出[Overflow]错误。sumSq(x*x-1)与sumSq((x*x)-1)完全相同,与sumSq(x*(x-1)不同
后果:
if x = 0 or 1 it's ok.
if x is greater than 1 (5 for example)
sumSq 5 = 5 + sumSq( 5 *
考虑-fun A调用fun B,反之亦然,我在B之前实现A,如下所示:
fun A() =
B() ;
fun B() =
A() ;
在这种情况下,SML/NJ口译员提示-
Error: unbound variable or c onstructor: B
我如何解决这个问题?也许是远期申报
让它引起无限循环这样就不需要为此使用let绑定。您也可以在顶级声明它:
fun a () = b ()
and b () = a ()
因此,没有必要为此使用let绑定。
标签: Sml
mlcomparison-operators
我似乎找不到关于为什么这不起作用的参考:
- (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)
-(2000,1)简短的回答:只
在Isabelle理论文件中,我可以编写简单的单行策略,如以下内容:
apply (clarsimp simp: split_def split: prod.splits)
然而,我发现,当我开始编写ML代码来自动校对,生成ML策略对象时,这些一行代码变得相当冗长:
clarsimp_tac (Context.proof_map (
Simplifier.map_ss (fold Splitter.add_split @{thms prod.splits})
#> Sim
我的功能中有一个尾巴问题。我想去掉尾巴,但我想不出一个办法。如果有人能帮我找到解决办法,我会很高兴的
fun Rollists (x::nil) = [x]
| Rollists (xs) =(map hd xs)::Rollists( map tl xs);
此函数用于将给定列表中的元素成对地从每个列表中输出。ListPair.zip的更大版本基于第一个列表从列表中生成成对:
fun generateTuples (lol) =
let
(* Treat the Li
我对标准ML有点陌生,我必须编写两个函数,其中一个必须查找列表中是否存在元素,另一个必须从同一列表中选择第一个元素,如果它符合第一个函数中的条件
到目前为止,我遇到了这个例子:
fun contains _ [] = true
| contains [] (x::xs) = false
| contains ys (x::xs) = (mem ys x) andalso (contains ys xs)
示例结果如下:
contains [1,2,3] [3,2] (* return
考虑函数g获取整数,如果整数大于之前确定的某个随机常量正值,则返回true,否则返回false
我想在SML中编写一个函数f,它将函数g作为参数。此函数f应返回之前确定的随机常数正值
算法(其他语言,C或其他语言):
这就是我在SML中尝试的:
fun f g =
let
val num = 1;
in
while !(g num) do (
val num = num + 1;
);
num
end;
但它不起作用。有什么建议吗
val nu
我是SML的新手。
如何在IF语句中使用AND运算符?
这是我的密码:
val y = 1;
val x = 2;
if (x = 1 AND y = 2) then print ("YES ") else print("NO ");
我的错误是:
stdIn:66.9-67.3错误:未绑定变量或构造函数:和
stdIn:66.3-67.9错误:运算符不是函数[文字]
接线员:int
在表达上:
1.
stdIn:66.3-67.9错误:运算符和操作数不一致[文字]
操作员域:bool*boo
我试图交换ML中列表中的元素。我的交换函数返回插入EQUALOP时的错误
fun swap(n:int, i:int, deck:card list) =
local
val card1_removed = nth(deck,i)
val card2_removed = nth(deck,n)
in
val dec
给定一个元组列表
[(1,2),(3,4),(5,6)]
我需要把它解压成这样
[[1,3,5],[2,4,6]]
解压的类型必须是('a*'a)list->'a list list
到目前为止,我把它作为解压函数,但我的输入不正确,我不确定如何访问pass-through('a*'a)
这将返回一个列表->一个列表-给您一个元组列表
[(1,2),(3,4),(5,6)]
我们想创建一个函数来重新组织它们
[[1,3,5],[2,4,6]]
我们知道输出应该类似于:
[ [tuple
有人能帮我写一个函数吗
我试过这个:
fun isPascalInteger (s:string) = if (size(s)=0) then return true
else if (!(isDigit(sub(s,0)))) then return false
else (isPascalInteger(extract(s,1)));
使用字符串最方便的方法通常是先转换为列表,然后使用列表函数:
fun isPascalInteger (s:string) = List.a
为什么下面的函数没有结束
(* funct1 is a different function that does end *)
fun funct(a,b::bs)=let val c=a in funct1(c,a,b::bs);
= ;
= ;
= ;
= ;
stdIn:15.54-17.2 Error: syntax error: deleting SEMICOLON SEMICOLON SEMICOLON
在这种情况下,错误消息非常有用。函数没有结束,因为您需要end关键字而不是
标签: Sml
context-free-grammar
我想用SML生成一个上下文无关的语法样式的整数列表
语法类似于S->1s2 | epsilon
这就是我试过的
fun gen(n: int) =
if n = 0 then []
else 1 :: gen(n - 1) :: 2
例如,gen(3)的预期结果应该是[1,1,1,2,2]
但是,我得到了与类型相关的错误
Error: operator and operand don't agree [literal]
operator domain: 'Z * 'Z l
标签: Sml
combinatoricsgame-theory
这是一场典型的不偏不倚的比赛。两名玩家轮流拾取标记为1到n的棍子,只要拾取了1号棍子,游戏就结束了。规则很简单:PlayerA倒计时到5,然后选择相应的棍子;普拉耶拉数到2,然后拿起相应的棍子。程序试图找到一个初始点,以便最后拾取1号杆
我试图在列表上循环,找出哪个初始位置会给出令人满意的结果,但返回的值似乎不正确。代码有什么问题
fun play(stick) =
let
val stick_list = n_list(stick)
(*n_list(8) will ge
我看到了另一个答案,但我不明白什么是basis.cm,它有什么用?你问了两个问题
basis.cm是什么?它有什么用途
这是最新的。它允许使用内置函数
如何编译和执行独立的SML-NJ可执行文件
假设您遵循了Jesper Reenberg关于如何执行堆映像的教程,那么让SML/NJ生成独立可执行文件所需的下一件事就是转换此堆映像。假设可以使用heap2exec实现这一点,这是一个获取堆映像的工具,例如在我的系统上生成的.x86 linux文件,并生成一个可以组装和链接的.asm文件
不幸的是,这
我是SML新手,我编写了一个程序,它接受3个整数(n,z,k),并希望将它们与程序中给定的值进行比较,如果语句正确,它将返回true,否则返回false。条件和值应该同时相等,我的意思是,如果所有这些数字都等于程序中给定的值,程序将返回true,所以我的if语句应该同时检查3个条件。
我的问题是,我不知道如何在一个if子句中写出所有这3个条件,因为SML不识别例如&或^as and!
例如,我想检查是否(n==8&&k==5&&z==9)。我应该用什么来代替&
代码如下:
fun EvalR (
标签: Sml
type-inferencetypechecking
首先,由于这个问题与学校的一个项目有关,我认为发布我的代码是不合适的。另外,正如我稍后解释的,我只有一个修改版本的代码
我解释我自己。我应该使用优先级队列实现Dijkstra算法的一个版本。我认为这样做的一个简单的函数方法是定义一个dijkstra函数,其中包含队列和目标节点的输入,以及一个helper函数,用于将与刚刚出列的列表元素相邻的节点排队。不幸的是,helper函数没有对未解析的Flex记录进行类型检查
到目前为止,代码似乎很重要,但请允许我再添加一个
细节因为图是4-正则的,每个节点
在bst环境中查找值时,我所要做的就是将要查找的值与节点上的根值进行比较
type 'a tenv = (name * 'a) btree
exception NotFound of name
fun find compare name Leaf = raise NotFound name
| find compare name (Node (lt, (key, value), rt)) =
case compare(name, key) of
LESS => find
什么是嵌套模式?我不明白为什么下面有嵌套模式:
exception BadTriple
fun zip3 list_triple =
case list_triple of
([],[],[]) => []
| (hd1::tl1,hd2::tl2,hd3::tl3) => (hd1,hd2,hd3)::zip3(tl1,tl2,tl3)
| _ => raise BadTriple
fun unzip3 lst =
我想为我用SML编写的程序创建单元测试
考虑一个函数
val foo = fn : int -> int seq
对于foo5它将返回:valit=foo(5,fn):int-seq。(seq是一些数据类型)
它做什么并不重要,我只是对创建检查元组左项的测试感兴趣
我试过:
val test = ((foo 5) = (seq (5,_)));
val test = ((foo 5) = (seq (5,fn)));
但它们没有起作用。我是否可以编写一行测试来验证左元组是否包含5?您
此函数用于计算列表中的计数元素y
fun func y xs=List.length(List.filter(fn x => x=y) xs);
val countElement = fn : ''a -> ''a ?.list -> int
func 1 [1,2,3,4];
val it = 1 : int
但是,当我写func 1.1[1.1,2.1,3.1,4.1]时;我得到一个错误:
stdIn:64.1-64.35 Error: operator and ope
上一页 1 2 ...
6 7 8 9 10 11 12 ...
下一页 最后一页 共 21 页