我很难弄清楚,如何将每个处理过的字符恢复为int值
函数的工作方式应该是:val caesar=fn:int*int->int
因此,如果k=2466,n=2,那么输出应该是4688
希望代码不要太奇怪(我是SML新手)
在这里,while循环不是最好的工具。相反,您可以使用map,它为给定列表中的每个项执行给定函数,并返回一个新列表,其中包含每个函数调用的结果
换句话说:map(fnc=>(Char.ord c)+2)[2]、[4]、[6]、[6]将返回[52,54,56,56]。您可以将其转
我想写一些像这样的东西
fun factorial 0 = 1
| factorial n = n * factorial(n-1);
但是当我想开始新的生产线时,我没有得到“|”标志。我得到的结果是:
fun factorial 0 = 1
= factorial n = n * factorial(n-1);
当我开始第二行代码时。如果我按住shift键并“\”键,我就看不到竖线,我会看到其他东西。既然你说第二行以等号(=)开头,那么你似乎是在直接将代码写入解释器
无论如何,你必
我编写了一个通用例程,它接受多个参数并生成一个无限的斐波那契数列表,如下所示:
datatype 'a seq = Nil | Cons of 'a * (unit -> 'a seq) ;
fun fibo (a,b) = Cons(a, fn () => fibo(b,a+b));
val fib = fibo(0 , 1);
但问题是我想用currying技术来生成这个从0和1开始的fibonacci数的无限列表,我对currying的概念完全感到困惑
通过这个例子,我能了
编写幂函数inStandard Ml时遇到问题。我正在尝试编写一个名为exp的函数,类型为int->int->int
对于非负的e,应用程序exp b e应返回b^e
例如,exp3 2应该返回9exp必须使用下面提供的函数composite来实现exp不应直接调用自身。这是复合函数,它接受一个值n、一个函数和一个值x。它所做的只是将函数应用于x n值的次数
fun compound 0 f x = x
| compound n f x = compound (n-1) f (f x);
我想使用一个名为MY_LIB的变量,使用方式与使用SML_LIB类似。如何定义我的_LIB,以便它可以在.mlb文件中使用
ann
"MY_LIB /path/to/my/lib" (* this does not work*)
in
local
$(MY_LIB)/functions.mlb
$(MY_LIB)/fu
我正在学习SML,并尝试创建一个名为mySet的数据类型,它可以是任何int或real列表,但没有重复项,并且按顺序排列。到目前为止,我已经将数据类型和一些函数制作成一个列表,然后在该数据类型中返回它,这样可以很好地工作。但是我意识到数据类型的构造函数也可以被使用,这完全绕过了需求。对于我所需要的,我可以只使用函数,但我真的想知道是否有任何方法可以解决这个问题?如果列表不符合要求,那么我的大多数数据类型函数将无法正常工作
datatype 'a set = Set of 'a list | Em
我可以成功安装sml/nj,正如文档所说:
但是如何从源代码处安装,正如文档所说,让我下载config.tgz,而不是脚本install.sh可以从网络上下载和编译其他文件
但是,如果我想编辑源代码,并测试结果,这种方法似乎不起作用
例如:我编辑了文件compile.sml,希望看到结果,所以我需要重新编译编译器,但是install.sh将从internet下载compiler.tgz,而不是我更改的文件
从源代码处安装sml/nj如此热门?谢谢 smlnj.org没有SSL证书,已损坏,没有顶
我需要读取ML(SLMNJ)格式的文件并将其保存在某些结构中。我需要阅读一些指向图形声明的数据:
[( 1 , 2 , 13 ),( 2 , 3 , 3 ),( 2 , 4 , 8 ),( 2 , 5 , 4 ),( 3 , 1 , 5 ),( 3 , 4 , 1 ),( 4 , 6 , 5 ),( 5 , 5 , 5 ),( 6 , 4 , 6 )]
(第一个数字:节点名称,第二个数字:连接节点名称,第三个数字此鬃毛的重量(每个()显示一个鬃毛))
对于expamle,这是如何读取文件以及保
我试图创建一个deriv函数来区分
按如下方式使用数据类型:
datatype Symex = RCOEFF of real
| COEFF of string
| VAR of string
| POWER of Symex * int
| NEG of Symex
| PLUS of Symex * Symex
标签: Sml
smlnjlow-levelsqrt
正在尝试解决如何使用以下伪代码获取SML中的平方根:
sqrt x s = s if s*s <= x
sqrt x s = sqrt x (s-1) if s*s > x
sqrt x s=s如果s*s x
这个公式是讲师给我们的,我们必须在SML中解决这个问题
我尝试了几种不同的方法,但我将通过控制台发布错误的不同方法:
- fun sqrt x s = if ((s*s) <= x) then s | sqrt x s = if (s*s) > x then s
标签: Sml
smlnjgoogle-chrome-oscrouton-os
在apt get install smlnj并试图从终端调用sml后,Chromebook上的Crouton chroot出现了一个奇怪的错误,我在其他任何地方都找不到这个错误:
$ sml
/usr/lib/smlnj/bin/sml: Error -- unable to map 1179648 bytes, errno = 1
/usr/lib/smlnj/bin/sml: Fatal error -- unable to allocate memory object for BIBOP
我遇到了一种情况,我想忽略一些输入
在我的转换操作中,我使用一个简单的if-then-else表达式来测试我希望为其生成输出标记的输入,并为我希望忽略的输入生成一个NOP标记,因为您必须有一个类型正确的表达式才能满足ML
我尝试使用if this=that,然后使用1`goodToken else 0`goodToken(带括号和不带括号),但这无法通过操作输出部分的类型正确性检查
这些令牌被传递到下一个位置,然后分支到其保护仅允许NOP令牌的转换或不允许NOP令牌的转换
以这种方式,我生产和消
我为ML编写了以下代码:
fun get_digits (0, s) = s
| get_digits (d, s) = get_digits( d div 10, (d mod 10) :: s)
| get_digits n = get_digits( n div 10, [n mod 10] );
但它给了我以下错误:
Error: Operator and operand do not agree (overload conflict)
operator
在PolyML中,我试图绘制一个包含pixmap的按钮,但在shell小部件上调用XtRealizeWidget之前,找不到创建pixmap的方法
在XtRealizeWidget之后使用XCreateBitmapFromData,在绘制包含图片的按钮时会有很大的延迟,这真是愚蠢。这是下面的代码
相关线路为:
val shell = XtAppInitialise "" "appl" "clss" [] [XmNwidth 500, XmNheight 500 ] ;
val mainw
假设我有以下树数据类型:
datatype 'a tree = Empty | Node of 'a * 'a tree * 'a tree;
val x = Node(10, Node(20, Empty, Empty), Node(30, Empty, Empty));
这里,x是int-tree类型的变量。我想知道的是,在给定变量x的情况下,如何对树的不同部分进行分析和计算
例如,在此函数中:
fun add(tree) = ....
add(x);
假设函数将树的节点中的所有值相加,
我正在尝试创建一个程序,将大阶乘的数字相加,这就是我正在做的:
fun sumDigits n =
if n < 10 then n
else
n mod 10 + sumDigits(n div 10)
fun factLarge 1 = IntInf.toLarge 1
| factLarge n = IntInf.toLarge n * factLarge(n-1)
sumDigits (factLarge 100)
n=
如果n
标签: Sml
type-inferencesmlnj
我试图构建一个函数,该函数可以压缩给定的2个函数,而忽略较长列表的长度
fun zipTail L1 L2 =
let
fun helper buf L1 L2 = buf
| helper buf [x::rest1] [y::rest2] = helper ((x,y)::buf) rest1 rest2
in
reverse (helper [] L1 L2)
end
当我这样做时,我收到了错误消息:
错误:子句右侧与函
考虑以下SML中的列表示例:[[(“foo”~10.0)],[(“goo”~8.0)]
我将链接编写一个函数,该函数将删除主括号,这意味着输出将是:
[(“foo”~10.0),(“goo”~8.0)]
我写的函数是:
fun inner_list [[]] = [] | inner_list [] = []
| inner_list ((((x:(string*real))::xt)::xs)) = x :: inner_list xs;
它适用于大多数情况,但我知道我没有检查其中一个情
我以前也发过类似的问题,但我想我需要重新表述一下我所问的问题。早些时候,我在我想完成的事情上得到了很大的帮助
所以,我现在想知道的是,如何在代码中传递comp函数,使其可以自定义
我希望能够跑步
insertSorted(5, fn(a, b) => a > b, [8, 6, 3, 1];
insertSorted(5, fn(a, b) => a < b, [8, 6, 3, 1];
哪个会回来
val it = [8, 6, 5, 3, 1]
val it =
我可以得到一些帮助来实现统计案例数量的函数吗
首先,我很抱歉一遍又一遍地问你同样的问题
我已经试着实现这个函数一个多星期了,但我还没有掌握它的窍门
这就是我现在写的代码
fun count (x,nil) = 0
| count(x,y::ys) =
if x=y*2 then 2
else if x=y*4 then 4
else if x=y*10 then 10
else if x=y*20 then 20
else if
我目前正在为SML课程的作业评分。我已经编写了一些测试用例来自动检查学生作业中函数的正确性,我希望能够导入他们的代码,然后针对这些代码运行测试用例。我正在想象类似于python导入语义的东西。现在,我最好的解决办法是复制粘贴在每个作业底部的代码。这在SML中是可能的吗?看看,SML的单元测试库使用使用:
use "filename.sml";
(* your test cases here *)
如果在“student.sml”中有学生解决方案,在“tests.sml”中有测试用例:
您可以在
所以我用标准ML编写了一些代码,并试图用smlnj编译它。我得到了以下错误:
Error: operator and operand don't agree [tycon mismatch]
operator domain: unit -> Absyn.fundec
operand: unit
-> (pos * pos) *
((string * int) * (string
当我使用Emacs运行SML代码来理解错误时,我会收到一条错误消息。无论我的代码是什么,每次我尝试SML/Process/start SML repl
然后键入使用“项目名称”,我收到以下消息:
use "New_Pro";
[Opening New_Pro]
[use failed: Io: OpenIn failed on "New_Pro", Win32TextPrimIO:openRd: failed]
uncaught exception Error
raised at: .
我尝试在sml中创建堆栈,我尝试使用列表;但是我很难将元素添加到列表中。我试图从输入文件中读取行,如果行显示:
push 5
push 9
add
quit
然后我希望输出文件为:
14
因为5+9等于14。
到目前为止,我已经能够创建布尔函数来识别线是推还是有数字
fun is_digit (c) = #"0" <= c andalso c <= #"9";
fun is_Push (c) = String.isSubstring "push" c;
fun stack(in
为了比较两个字符串,并将相等的字符串添加到列表中,我使用内置的比较函数创建了此函数:
fun compareString(string, list) =
if compare(string, "hello") = EQUAL then string::list;
然而,这给出了一个错误。我猜我的语法一定是错的,我是否正确使用了比较函数
根据文档,比较功能的工作原理如下:
compare(s,t)使用排序Char对两个字符串进行词典比较。对字符进行比较。如果s分别小于、等于或大于t,则
我刚刚开始学习SML,我想写一个程序,它接受2个int和一个元组列表,对它们进行更改,然后返回一个列表(box是一个列表)。列表总是有2个元组。在某些if条件下,我需要更改元组中元素的数量。例如,我定义了Xb1,给了它元组第一个元素的数量(#1 head),然后我在代码中更改了Xb1的数量(并返回列表)。但问题是这个数额没有改变。
代码如下:
fun MoveBoxL(Xw,Yw,boxes:(int * int)list) : BOXES =
let
val head = List.hd bo
我正在实现一个函数,它包含两个int*int*int类型的日期:第一部分是年,第二部分是月,第三部分是日。如果第一个日期早于第二个日期,则应返回true
我想测试这个函数,但我遇到了一些问题。这是ex1.sml文件
每当我尝试运行最后一个文件时,通过加载REPL,我总是以以下错误结束:error:syntax error:replacement VAL with EQUALOP
但是,如果我将测试放在ex1.ml中并将其加载到REPL中,它不会给出任何错误
fun is_older(d1 : (
我正试图解决ml中的一个问题,我有点卡住了。请原谅,这是一个微不足道的代码,但回答它将解决我的大部分问题
代码:
错误:
Error-Can't unify 'a list with int list * int list (Incompatible types) Found near loop (sorted)
Static errors (pass2)
sorted是由两个列表组成的元组循环接受一个列表参数那么我如何将其更改为接受元组,很抱歉我的新类型问题。我只是还不能识别SML中的数据类
我对from的函数定义中的Cons()函数的作用感到困惑
它是Stream的两个构造函数之一。请看屏幕截图的第二行--这就是所有的缺点。流所代表的是一个潜在的无限列表。由于SML是一个复杂的系统,因此需要以稍微迂回的方式完成
让我们首先看看普通列表是如何工作的:
datatype 'a list = [] | :: of 'a * 'a list
cons由两部分组成:
列表中的第一个元素
名单的其余部分
在懒惰列表中,它非常相似
datatype 'a Stream = Nil | Co
代码如下所示:
- fun foo(a : int, b :int) =
= if a > b
= then []
= else [a] @ foo(a+1, b)
= ;
val foo = fn : int * int -> int list
- foo(1, 100);
val it = [1,2,3,4,5,6,7,8,9,10,11,12,...] : int list
如果a大于或等于b,则函数打算从a到b构造一个列表,否则将创建一个空列表。当我使用绑定到的
我应该写一个函数,给出一个列表,它会给我一个这种类型的多项式
例如,表单([1])给出(0,fn 0=>1))
但问题是当你写这样的东西时
形式([1,5])给出(1,fn 0=>1 | 1=>5))
我对fn 0=>1 | 1=>5部分感到非常困惑,因为fn不是递归的。我可以从列表的长度中找到多边形的顺序,我可以使用x::l访问该列表中的每个元素,但是如何使用元素的每次访问构建此函数(fn 0=>1 | 1=>5)。我不想要一个明确的答案,但我需要帮助 使用列表结构中的方法,这可以通过制作笛卡
我想构建一个列表,列表中的所有元素都与给定列表的头配对。到目前为止,我有下面的代码。我真的不确定我在这里哪里出错了
fun foo [[]] = [[],[]]
| foo [[x]] = []
| foo (x::y::ys) =(x,y)::foo(ys);
我的签名应该是这样的
('a list) list ->('a list * 'a list) list
示例输出
foo [[2,3,4],[1,2],[6,7,8]] = [([2,3,4],[1,2]),(
我是SMLNJ的新手。这项工作:
case (tts t2) of
(other, "<+") => parse_append t t2 ts pre c j
| (other, "<<-") => parse_sample t t2 ts pre c j
| (other, "<-") => parse_assign_or_sub t t2 ts pre c j
| (_, _) => error t2 "parse_stmt
我试图找出如何在不同类型的输入上实现fold函数。作为示例,我将对列表使用count函数(不过,我有多个函数要实现)。
假设输入一个int-list(这应该适用于任何类型的list),我的count函数是
val count = foldr (fn(x:int,y)=>y+1) 0 ;
val count = fn : int list -> int
但是,我尝试在类型为的情况下创建计数函数
val count = fn : int list * bool list -> i
我有以下职能:
fun IsDivisible(t, t2) = if t mod t2 > 0 then true else false;
fun IsDivisibleFilter(ts, t) = List.filter(fn x => IsDivisible(x, t)) ts;
fun IsDivisibleMap(ts, ts2) = map(fn x => IsDivisibleFilter(ts, x)) ts2;
IsDivisibleMap-获取两个i
我阅读了SML的语法,发现除了infix和infixr之外,它还包含nonfix。我试图找到一些基本的例子,但似乎没有人使用它。还尝试查找有关该运算符的一些以前的线程,但没有
nonfix背后的想法是什么?为什么似乎没有人使用它?nonfix将中缀运算符转换为元组上的“常规”函数。例如,*是一个类型为int*int->int的函数,但不能被称为*(2,3)。如果出于某种原因您想这样做,您可以执行以下操作:
nonfix *
然后,*(2,3)将计算为6
不幸的是,作为一种恼人的副作用,您不能再
假设我有两个SML函数Ping和Pong。我的代码是:
val arr=Array.array(10,0)
fun Ping (arr,_,[],_)=true
|Ping (arr,0,(x::xs),ping_list)=Ping(arr,1,xs,Pong(arr,ping_list,10)) //<-Problem is here
| Ping (arr,K,(x :: xs),ping_list) =
(if Array.sub(arr,x)=0
我试图显示列表中元素的所有多次出现的索引
标准毫升
但我的代码显示的是空列表:(
这是我的代码:
fun index(item, xs,ys) =
let
fun index'(m, nil , ys) = (
SOME (ys) )
| index'(m, x::xr , ys) = if x = item then(
(ys @ [m]);
index'(m + 1, xr , ys)
)
else index'(m + 1, xr,ys)
in
index'(0
您好,我目前正在学习编程语言课程,在使用以下helper函数时遇到困难:该函数采用一种模式并返回它用于变量的所有字符串的列表。
这是一种模式:
datatype pattern = Wildcard
| Variable of string
| UnitP
| ConstP of int
| TupleP of pattern list
| ConstructorP of string * pattern
我正在尝试学习在标准ML中使用函子。我已经编写了以下代码,但我不断收到错误错误:不匹配的结构规范:元素。谁能给我指出错误吗。我没能找到它:
signature SET_ELEMENT =
sig
type element
val equal: element -> element -> bool
end
signature SET =
sig
type set
structure Element : SET_ELEMENT
val empty:
我希望这能起作用:
fun function (i) =
let
if i = 1 then
val h = valOf(Int.fromString(valOf(TextIO.inputLine TextIO.stdIn)))
else
val h = someFunction();
in
code...
end
但似乎你不能声明这样的值。。。如果ML中的语句是一个表达式,我应该如何使
我很难用let,in,end定义一个curry函数。
我有以下代码:
filter_many listOfFunc listOfElements =
let
fun allPredicate(element,[]) = true
| allPredicate(element,(a,b)::xs) = a(element) andalso (allPredicate(element,xs))
fun isPredicateAux(element) = allP
我试图找出一个元素是否是集合的一部分。以下是我的功能:
fun elementOf(x:int, (nil:int list, nil:bool list)) = nil
| elementOf(x, (y::ys, z::zs)) = if x = y then z else elementOf(x, (ys, zs));
因此,如果我调用elementOf(2,([2,7,4],[false,true,false])它将返回false
但是,我收到了错误消息:
Error: types
我用的是新泽西的标准毫升。当我运行Math.sin3时,我得到:
SML/NJ:Io[Io:openIn在“C:\cygwin\home\jhr\Work\smlnj\release\SML.boot.x86-win32\smlnj\basis.cm\x86-win32\basis.cm”上出现意外异常(错误?),win32 bin prim Io:checkHndl:openRd:failed]在以下位置引发:
基础/实现/IO/bin IO fn.sml:617.25-617.71../cm
我试图创建一个函数,将ML列表中的数字平方,然后将这些数字相加
fun sqsum(lst) = map (fn x => x*x) lst;
我这里有一个列表,并返回每个数字的平方列表,但我无法计算出加法部分。您可以一次解决一个子问题,然后合成结果:
val sq = map (fn x => x*x)
val sum = foldl (fn (x, result) => x + result) 0
val sqsum = sum o sq
或者您可以将map和foldl
我不熟悉ML,但在其他使用类型推断的语言中,我已经学会了一种习惯,即每当右侧的推断对人类读者来说是显而易见的时候,就忽略该类型的事物,而每当该推断对人类来说不是显而易见的时候,就显式地声明该类型的事物。我喜欢这个约定,并希望在我的ML代码中继续使用它
我有以下等效的函数声明示例:
fun hasFour [] = false
| hasFour (x::xs) = (x = 4) orelse hasFour xs
相当于
val rec hasFour: int list -&
我正试图写一个程序,在一个列表中循环n次。
假设L=[a1,a2,…,an]
我试图实现的是[ai+1,ai+2,…,an,a1,a2,…,ai]
我参考了之前关于这个问题的帖子。但是,我不确定如何获得输出或[ai+1,ai+2,…,an,a1,a2,…,ai]
对于输出:我尝试了
-循环([1,2,3,4],5)
但是,我得到的错误是操作数和运算符不匹配
这是我在上一篇文章中找到的代码:
fun cycle n i =
if i = 0 then n
else cycle (tl n) (i
所以我用C写了这段代码来打印ASCII表,但是我被告知要使用SML来完成这个特定的任务
以下是我当前的C代码:
// Program to print ASCII table.
#include <stdio.h>
int main()
{
unsigned char count;
for(count=32; count< 255; count+=1)
{
printf(" %3d - %c",count,coun
我是ML的新手,需要一个函数来接收一个特殊的预定义数据类型,并且能够引用它的整个参数数据类型,而不是它的组件
下面是一个愚蠢的例子:
datatype frame = Frame of string list * string list
(* Type: fn : string * frame -> frame *)
val lookup_variable_value_in_frame =
fn (string(var), Frame(variables, values)) =&
我尝试了以下方法:
fun consAll (nil, n) = [n]
| consAll ((x::xs), n) = [[n::x], [consAll(xs, n)]];
但它返回以下错误:
“错误:运算符和操作数不一致[循环度]
操作员域:“Z列表*”Z列表
操作数:“Z列表*”Z列表
在表达上:
(n::x)::nil:::(consAll(,)::nil)::nil“
请告诉我哪里出了问题,我是SML的初学者。[[n::x],[consAll(xs,n)]]创建了一个两元素列
1 2 3 4 5 6 ...
下一页 最后一页 共 20 页