我遇到了一个元组问题,给定一个成对元组列表,它应该变成一对列表:即[(1,2)、(3,4)、(5,6)]应该返回([1,3,5],[2,4,6])
我已尝试使用以下代码解决此问题:
fun convert L = foldl (fn(a,b) => #1a::b) [] L;
但我得到一个错误,说:未解决的flex记录。
有人能解释为什么我会得到这个,以及如何修复它吗 我手边没有SML解释器,但我想您正在寻找。尝试:
IIRC,“未解决的flex记录”与记录匹配有关,而您在这里没有使用
我试图写一个SML程序来检查矩阵是否是奇异的。
矩阵已表示为列表列表。示例[[1,2]、[3,4]、[15,50]]是有效的,但[[1,2]、[1,2,3]]不是
fun remove (l,r)=
let fun iter(front,l,i)=
if i=r then front@tl(l)
else
iter(front@[hd(l)],tl(l),i+1)
in
iter([],l,1) end;
fun remo
标签: Sml
mlhigher-order-functions
我在编写一个函数时遇到了问题,该函数将接受函数列表和参数,然后使用传递的参数调用每个函数,并返回调用结果列表。
示例:build[f,g,h]2将返回此值,但使用调用的函数和结果而不是调用:[f(2),g(2),h(2)]
顺便说一下,使用SML/NJ
首先,我尝试了这种模式的多种变体:
fun build functions TheArgument = if functions = [] then [] else
[hd(functions) TheArgument] @ build
问题是:
我们使用以下类型表示多项式:
datatype exp = Const of int | x | Add of exp * exp | Mult of exp * exp | Power of exp * int
例如,表达式Add(Add(Mult(Const 3,Power(x,2)),Mult(Const 6,x)),Const 1)
表示多项式3x2+6x+1
(a) 编写一个函数“evaluate”来计算给定表达式e的特定值x
我的回答是:
datatype exp = C
我有一个字符串列表,我想将其解析为一个元组列表
更具体地说:
val strlist = ["1, 2, 3, 'hello', 4, 5, false, 6, [1, 2, 3], [1, 2]",
"6, 1, 3, 'world', 4, 5, true, 4, [1, 2], [4, 7, 5]",
. . .] : string list
进入
每个列表元素都有相同的格式。在此处找到它:
虽然我只是使用String.fie
只是一个基本的卡塞尔密码。我已经测试了所有的子函数,只是encryptChar()并不特别有效。我得到一个无限循环。它应该是递归的。以下是所有代码:
fun replace (str : string, index : int, newChar : char) : string = String.substring(str,0,index) ^ String.str(newChar) ^ String.substring(str,index+1,(size str) - index - 1;
我刚开始学习sml,所以请原谅我可能造成的任何不适
好的,这是我的函数:
fun swapPairsInList [(x,y)]
swapPairsInList: (’x * ’y) list --> (’y * ’x) list
我知道如何(递归地)交换列表中的对,但我遇到的问题是当列表为空(null)时的基本情况。如何确切地检查此列表是否为空?我试过了
null [(x,y)]
但这只是一个例外。我应该使用模式匹配来解决这个问题吗?好的,所以我找到了答案,当我查看位于
新代码:
f
编写一个函数remove_option,它接受一个字符串和一个字符串列表。如果字符串为空,则返回NONE 不在列表中,否则返回一些xs,其中xs与参数列表相同,但字符串不在其中 在里面。您可以假定该字符串最多在列表中出现一次。使用提供给您的相同_字符串 比较字符串。样品溶液约为8行
函数类型应该是fn:string*string list->string list选项。这是我的代码
fun same_string(s1 : string, s2 : string) =
s1 = s2
f
我对运行以下代码时出现的“匹配冗余”错误感到有点困惑:
datatype expression = Constant of int |
Variable of string |
Operator of string * expression |
Pair of expression list |
List of expression list
fun add2 (ul1: expressi
该函数用于检查两条直线之间的交点。每对参数都是斜率和y截距。我应该找到两者之间的交叉点,如果它存在的话
出于某种原因,我无法让自己看起来像是在工作,为此我已经挣扎了好几个小时 real在SML中不是相等类型,因此(m1-m2)=0是一个类型错误
原因是,由于舍入错误,浮点表示的有限精度可能会产生意外结果(例如,(1.0/7.7)*7.7=1.0将返回false)。您可以通过使用Real库中的=操作符来解决这个问题,即Real.==(m1-m2,0)(或者只使用Real.==(m1,m2))。但请
本作业从导入到使用sml 5.14编程
这是我的代码,但我得到的消息是,在基本情况下,模式匹配并不详尽
fun revrev [] = [[], []]
| revrev [x::xs,y::ys] = revrev[ys@[y], xs @ [x]];
val test1revrev = revrev [[1, 2],[3, 4, 5]];
From valtest1 I want the output [[5, 4, 3], [2, 1]]
我不明白为什么我的函数不起作用,可能需
考虑到ref运算符,我很难理解其应用和以下说明的含义:
1.
在这个定义中,我定义了什么
- val ref x=ref 9;
val x = 9 : int
2.
这里我用ref x做什么:=ref 12
- val x= ref 8;
val x = ref 8 : int ref
- ref x := ref 12;
val it = () : unit
- x;
val it = ref 8 : int ref
val ref x=ref 9将x定义为9
如何删除标准ML中列表中的最后一个元素?
我的清单定义如下:
val list = [1, 4, 6, 8, 9]
我想删除最后一个元素,并将列表放在val列表中。好吧,您有各种各样的方法
您可以将原始列表拆开,并开始使用元素构建新列表,直到到达最后一个元素
fun f [] = ...
| f [x] = ...
| f (x::xs) = x :: ...
或者您可以使用该函数从列表中获取第一个i元素。显然,您可以使用该函数来计算不从列表中提取多少元素
fun h xs = Li
我正在Windows 10上使用最新版本的SMLNJ(110.79)
我似乎无法使用任何SML Basis库函数
下面是我用List.filter
fun isOdd nmbr = (nmbr mod 2) = 1;
List.filter isOdd [1,2,3,4,5];
这会产生以下错误
SML/NJ:Io[Io:openIn在“C:\cygwin\home\larsberg\smlnj2\SML.boot.x86-win32\smlnj\basis.cm\x86-win32\basi
我使用的是SML/NJ,我需要使用一组函数,这些函数位于另一个文件中的某个文件f1.SML
但是,我不是直接运行f2.sml,而是从其他地方导入它
如果我使用f2.sml中的use命令,将路径设置为相对于f2.sml透视图的f1.sml,则在导入f2.sml时,它将从运行脚本透视图中查找提供的路径
我不能使用绝对路径,我不想合并这两个文件的内容
如果这是一个简单的语言应用程序,很抱歉,但我是SML新手,还没有找到答案。我建议使用(CM)。它是SML/NJ上下文中SML代码的构建系统。如果需要,它
我想知道如果SML中的模式匹配将继续执行Match警告,有什么好的策略可以理解
考虑以下功能:
fun f 7 (x,y) = x * 5.1 | f x (y,#"a") = y;
乍一看,它似乎没有提供Match警告。但如果我来运行它,它会的
在我看来,我们处理所有的案件。哪种情况我们不处理?即使f7(x,#“a”)我们也知道应该是哪种情况(第一种情况)
我的问题是,如何确定函数将输出衰减
此外,我很乐意回答为什么以下函数无效:
fun f (x::xs) (y::ys) (z::zs)
我已经编写了一个ml函数,在输出中我得到了
out=Mary(“a”,“Zary,Zary”)
玛丽和扎里是建筑工人。但正如您所看到的,输出中有一些“#”。
如果我这样做
瓦尔·玛丽(“a”,x)=出局;
然后它就出现了
x=[Zary(“b”),Zary(“c”);这是正确的
我想得到完整的输出,而不是散列。请帮助我。如果(看起来是这样)您正在使用SML/NJ,那么您需要将Control.Print.printDepth或Compiler.Control.Print.printDepth(取决
我是个新手。我写下面的代码
Delay(e) == fn () => e
Force(e) == e()
fun time_consuming(n) =
let fun tak(x, y, z) = if x <= y then y
else tak(tak(x-1,y,z), tak(y-1,z,x), tak(z-1,x,y))
in
fun tak(3*n, 2*n, n)
funend;
fun fib(n)
我假设在标准ML中:
int在32位linux上是32位的
在64位linux上,int也是32位的吗?此外,对于标准ML,是否有一个地方(url)可以概括不同数据类型的大小?感谢32或64位是指地址的维度。因此,数据类型大小相同,但指针大小会发生变化,因为64位系统使用64位来寻址内存整数的大小是特定于实现的-标准中没有指定。在MoscowML中,32位平台上使用31位整数,64位平台上使用63位整数
SML/NJ显然在64位和32位系统上都使用了31位整数(我之所以这么说,显然是因为我在
SML中是否有标准的排序功能?互联网上的文档太少了,我找不到任何文档。这个列表如何排序?你总是可以用reverse来得到相反的结果
- fun sort(L) =
if L=[] then []
else if tl(L)=[] then L
else merge(sort(take(L)), sort(skip(L)));
val sort = fn : int list -> int list
请看。雷切尔只对了一部分。的确,SML Basis库中没有定义排序功能
我正在尝试学习sml中的输入输出。为了将与s1相同的ls字符串复制到文件l2中,我做了以下操作。我遇到了一些我无法理解的错误。有人能帮我解决吗
fun test(l2:string,ls:string list,s1:string) = if (String.isSubstring(s1 hd(ls))) then
(TextIO.openOut l2; TextIO.inputLine hd(ls))::test(l2,tl(ls),s1) el
我正在研究和学习ML语言。我遇到一个问题,很难解决。我肯定我会使用遍历、大小和子字符串函数,但我不能用某种方式来表达,我有点困惑。你能帮忙吗
问题:
val x = [ ["National", "Aeronautics", "and", "Space", "Administration"]
, ["The", "North", "Atlantic", "Treaty", "Organization"]
]
样本运行:
val it = [ {acronym="
完成一项基本上需要一棵树的家庭作业,其声明如下:
datatype a BinTree =
Leaf of a
| Node of a BinTree * a BinTree;
并返回树的整数高度的元组和存储在树最深部分的值列表
fun deepest tree =
case tree of
Leaf(n) => [n]
| Node(l, r) => if #1(deepest l) > #1(deepest r) then ((#1(deepest l) + 1),
根据赋值的参数,我不能使用模式或折叠,这是一个关于更大问题的特定方法的玩具示例
当我运行代码时,自然会得到一个“0”。所以问题是,我如何得到一个u计数的最终值
fun num_counter(numbers: int list, a_number: int) =
let val count = 0
in
let fun count_num(numbers: int list, a_count: int) =
如何为下面这样的数据类型返回随机值
datatype rank = Jack | Queen | King | Ace | Num of int
datatype rank = Jack | Queen | King | Ace | Num of int
我正在处理一个函数,生成一个随机卡片列表,以便输入到另一个函数,因此也需要一个类似的函数
输出应该是杰克、金等符号,或者是2到9之间的整数
以下代码不正确:
fun pick_rank() =
case Random.randRang
假设我在sml中有一个非常大的列表,然后sml显示一些条目,然后开始显示#字符
有人能告诉我如何查看整个列表吗?您可以这样做:
(* Prints a list in its entirety.
* ls is a list of type 'a list
* f is a function that converts an 'a to string *)
fun printList f ls =
let
(* Prints the contents of the list ne
标签: Sml
smlnjpolynomial-math
我正在尝试解决SML上的多项式求值问题,以下是我当前的代码:
fun eval (nil, b:real) = 0.0
| eval(x::xs, a:real) =
let val y:real = 0.0
fun inc z:real = z+1.0;
in
(x*Math.pow(a,(inc y))) + eval(xs,a)
end;
问题是它只增加y一次,有没有办法让y从0开始,每次递归都增加1 您可以使用局部函数(或辅助函数)的概念来实现这一点。代码如下:
l
这是一个混乱但有效的代码。我只是想得到一些帮助来理解为什么k::ks被视为“列表”而不是“列表”。
我想拿一份清单和一份清单清单,检查第一份清单是否必要。
我的意思是,第一个列表中的所有元素是否都可以在另一个列表中找到
fun do1(a,[],_)=false
|do1(a,k::ks,n)=if a=List.nth(k,n)orelse do1(a,ks,n) then true else false;
val n=0;
fun do2([],k::ks,_)=[]
|do2(_,[],
我是ML的新手,我很难提取整数数组的最小值或最大值。
我已经使用从整数列表创建了数组
提示可能非常有用,因为像hd或tl这样的函数不适用于OCaml中的阵列:
let min_array arr = Array.fold_left min arr.(0) arr
此代码使用arr.(0)作为最小值的初始候选,如果数组为空,则会失败,因此您可能需要检查该值,或者使用始终大于实际最小值的特定于域的初始候选值(我个人担心在这些情况下使用max_int)
我看到SML有一个foldl函数,允许做同样的
标签: Sml
smlnjcurryingpartial-applicationmap-function
我有以下功能:
map(map(fn x =>[x])) [[],[1],[2,3,4]];
产生:
val it = [[],[[1]],[[2],[3],[4]]]
我不明白这个函数是如何工作的。难道不是每个map函数都需要一个函数和一个列表吗?似乎没有足够的理由让它实际执行
如果我跑步:
map(fn x =>[x]) [[],[1],[2,3,4]];
我得到:
val it = [[[]], [[1]], [[2,3,4]]];
这对我来说更有意义,因为它接受列表中
通常,以下内容用于计算列表的长度
(* Compute the length of a list *)
fun length(L) =
if null L then 0
else 1 + length (tl (L));
但是如何通过只在5到10之间计数来指定成员的范围呢
如果我想对问题1使用函数foldr,怎么做
在List.foldr的lambda函数中,如果元素符合条件,则应将1添加到总数中,如果元素不符合条件,则应将0添加到总数中。这样,您就可以跟踪与您的条件匹配的元素数量
v
在SML中,是否可以在一个case语句中包含多个模式
例如,我有4个用字符串表示的算术运算符,“+”、“-”、“*”、“/”,我想打印“加减”,如果它是“*”或“/”,则它是“加减”
TL;DR:是否有地方可以简化以下内容以减少使用案例
case str of
"+" => print("PLUS MINUS")
| "-" => print("PLUS MINUS")
| "*" => print("MULT DIV")
| "/" => print("MU
它收到了一个警告:匹配非穷举
x::xl=>
我想做的是:
p([])=[]
当我这样做时,它会给出一个未捕获的异常匹配[nonexhaustive Match failure]您测试的内容,x::xl=[],将永远不会为真。列表是代数类型,定义为
fun p( x::xl ) =
if x::xl = [] then []
else [0];
表示列表的值是空列表或放在另一个列表前面的某个元素
因此,一旦您的x::xl的初始模式匹配成功,您就知道它不是空的。(不过,这应该相当清楚,因
我正在尝试用ML编写一个简单的过滤函数。其思想是函数仅使用大写字母获取字符串列表并返回字符串列表,其中仅包含以大写字母开头的字符串。这是我的实现,但是我得到了一个我不理解的类型错误:
fun only_capitals (strs : string list) =
let
fun isCapitalized (str) = Char.isUpper(String.sub(str, 0))
in
List.filter(isCapital, strs)
end
我想覆盖print,让它输出到除stdout以外的扩展流。我有两个文件:m1.sml和main.sml在同一个目录中。我想覆盖这两个文件中的print行为,但它无法覆盖m1.sml内部的print
m1.sml
structure Demo : sig
val printSomething : string -> unit
end =
struct
fun printSomething s = print s
end
use "m1.sml";
fun red
我试图在类型T上定义一个多态函数sum,其中类型T可以是int、real或类型T的列表。int和real情况下的sum应该按预期工作。对于T的列表,它应该返回两个列表的对应元素之和。列表的长度应该相同
示例:
sum (INT 2, INT 3) = INT 5
sum (REAL 2.3, REAL 3.4) = REAL 5.7
sum(L [2, 3, 4], L [3, 4, 5]) = L [5, 7, 9]
sum(L L([2, 3, 4], [2, 3, 4]), L ([
我想使用if(条件),然后使用语句1,语句2。。。其他声明1、声明2、;
在SML编程语言中。
我不能使用和,简单的空间或,。如果可能的话,有什么建议吗?
注意:我不是指嵌套的if-else。但是这很清楚。您可以使用构造(expr1;expr2;…;exprn)顺序执行多个表达式。因此:
if condition then (
expression1;
expression2
) else (
expression1;
expression2
)
看来你不能把在expressi
SML新手,正在寻求列表问题方面的帮助。
基本上,我需要创建一个大于变量X的列表
例如:
test(5,[13,2,4,17,8])
Expected Result: (13,17,8)
我知道我可以通过编写两个单独的函数来实现这一点,一个函数确定值小于x,然后遍历列表。或者我可以尝试在一个函数中完成所有操作
任何帮助都将不胜感激 您可以使用filter过滤掉[13,2,4,17,8]中大于5的元素
> List.filter (fn x => x > 5) [13,2,
我在理解SML中函数绑定和函数调用的计算方面有点困难
函数绑定和函数调用的简单示例:
val w = 12;
fun pow(x:int,n:int) =
if n = 0
then 1
else x * pow(x,n-1)
pow((1+1),3);
一点理论:
形式参数-方法中使用的标识符,表示调用方传递到方法中的值。
在上面的函数绑定中,形式参数是x和n
实际参数-调用方传递到方法中的实际值。
在下面的函数调用中,实际参数是(1+1)和3。
我的两
我已经在SML中编写了一个函数sumF,它执行以下操作:
fun inc x = x+1;
val inc = fn : int -> int
sumF inc 3;
9 : int (i.e. inc 3+inc 2+ inc 1+ 0)
萨姆夫
现在我想用sumF写一个函数sumsq(平方和),但我不能这样做。这就是我所做的
fun sumsq 0 = 0 |
sumsq n = n*n + sumsq (n-1);
val sumsq = fn : int -> int
su
为什么要编译
fun foo (h::t) =
h = hd(t);
但事实并非如此
fun foo (h::t) =
PolyML.print (h::t);
print "\n";
h = hd(t);
?
我认为你对语言的挫折感比语言的局限性更妨碍你解决问题。正如我在前面的回答中所说,分号不能像您使用分号那样使用。您需要将这些语句括在括号内:
fun foo (h::t) =
(
PolyML.print (h::t);
print
因此,我正在进行练习期末考试,有一个问题要求我为这个sml代码绘制一个解析树:
fun ff f x y = if (f x y) then (f 3 y) else (f x "zero")
val ff = fn : (int -> string -> bool) -> int -> string -> bool
我了解如何获取这种类型,但不太确定如何绘制解析树来表示它
在我的家庭作业中,我们做了这样一个简单的问题:
我能想到的最简单的方法是稍微重新格式化代
那些退货类型有什么不同
val fn1 : int −> (int −> (int −> int))
val fn2: (int −> int) −> (int −> int)
这将创建类型为的函数
int -> int -> int meaning int -> (int -> int)
是这样吗?没有括号,它们有相同的意思 正如您所说,fn1的函数类型相当于int->int->int->int->int
如果有多个参
如何将整数的最大值放入SML中的val中?
我看到您可以使用intMax:
> Int.maxInt;
val it = SOME 1073741823 : int option
但如果我尝试将其作为值放入val,它将打印错误:
> val max:int = Int.maxInt;
Error: pattern and expression in val dec don't agree [tycon mismatch]
pattern: int
expression:
我在SML目录中找到了Trie的这个实现:
signature DICT =
sig
type key = string (* concrete type *)
type 'a entry = key * 'a (* concrete type *)
type 'a dict (* abstract type *)
val empty :
我需要帮助完成此代码:
fun insertSorted(x, comp, []) = [x]
| insertSorted(x, comp, a::rest) = ??
如果书写正确,它将返回
- insertSorted(5, fn(a, b) => a > b, [8, 6, 3, 1]);
val it = [8, 6, 5, 3, 1]
代码获取一个值、一个比较函数和一个列表,并返回一个与上面给出的列表类似的新列表。Comp用于确定列表中的值的顺序 以下是用英语完成
我不熟悉SML语言,我想这样做:
问一个人“你的全名是什么?”
从用户键盘获取答案
写上“你的全名是”+姓名(他或她的名字)
这个答案有三个部分。第一部分回答了你唯一的问题。第二部分回答了一个你似乎没有问过的问题,第三部分讲述了如何通过自己的方式找到问题的答案
如何用SML语言从用户键盘读取字符串
您可以使用TextIO.inputLine TextIO.stdIn:
- val wat = TextIO.inputLine TextIO.stdIn;
Hello, World!
val wa
我有一个2天的期中考试,我的教授宣布为了练习,我们应该为列表编写重要函数的实现。我在上找到了列表结构的重要函数列表,但该站点只包含函数名和函数类型。我想知道是否有人知道一个网站,它既有功能的实现,也有类型的实现。我试图搜索这个,但找不到任何有用的东西。我对高阶函数和咖喱不太熟悉,因此了解一些重要的列表函数是如何实现的示例对我很有帮助,这样我就能理解基本知识。因此,如果有人知道一个链接,其中包含重要列表函数的实现代码,如果您能与我分享,我将不胜感激
谢谢。SML/NJ的基本库实现是开源的。您可以在
我从未在Windows机器上使用过SML(以前在带emacs的unix机器上使用过)
在我的一生中,在sml环境中找不到当前目录。如果我尝试:使用“filename.sml”,则会引发异常。。我找不到我的文件放在哪里
顺便说一句,该文件是用记事本++编写的,仅命名为w/a.sml扩展名 当前工作目录将是您启动SML解释器的位置。如果您的桌面上有快捷方式,则我希望您可以在快捷方式的属性中设置CWD(我不是windows用户),我希望默认情况下它是您安装SML/NJ的目录
如果从命令行启动sml解释
我是SML的新手(实际上是编程)
这是我在这里遇到的一个程序。如何使用SOME和NONE,以及如何使用'before'?SOME('a)和NONE是选项数据类型的一部分。是中的代数或复合数据结构。有关选项数据类型的详细信息,请参阅。最大的想法是,当函数返回程序员真正关心的类型的值没有意义时,允许函数返回值None
对于用户定义的函数readlist而言,重要的数据是字符串。但在某个时刻,程序会到达文件的末尾,并读取一个解释为而不是字符串的值
将TextIO.openIn看作是一个打开流并在其中搜
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 20 页