我试图用两个值构造函数定义一个新的多态类型generic_list,list和Seq,并添加映射所有项的函数map_函数(proc,items)
以下是我到目前为止的情况:
datatype 'a seq = Nil | Cons of 'a * (unit -> 'a seq);
datatype 'a generic_list = List of 'a list | Seq of 'a seq;
如何构建map\u函数
当我有以下要求时:
签名:generic\u映射(过程、项目)
我试图写一个代码,检查数字是否是斐波那契或不是在ML。我是一个初学者。帮我找出我的代码有什么问题
fun isfib(n :int): bool=
let
val a1=1;
val a2=1;
val temp=0;
in
while a2<n do (
a1=temp
a2=a1
a2=temp+a2
)
if a2=n then true
else false
end;
fun-isfib(n:int):bool=
让
vala1
我想定义一个函数,它接受一个整数n并返回一个整数n*,使得n和n*位于从1到n的同一组整数中,并且该函数必须是双射的
我尝试了以下方法
fun bij(n) =
let
val ls = zip(upto (1, n), List.rev(upto (1, n)))
val Tw_2 = fn(a, b) => b
in Tw_2(List.last(ls, n-1)) end;
但不幸的是,对于所有的n值,它都返回1。我真的被
我用我能想到的所有基本情况编写了一些sml代码,但是我仍然得到了这个警告。因此,函数检查第一个列表是否是第二个列表的排列。我不确定它是否有效,尽管我认为它进入了一个无限循环
fun isPermutation(nil: int list, nil: int list): bool = true
| isPermutation(x::nil, nil) = false
| isPermutation(nil, y::nil) = false
| isPermutation(x1::ni
如何在SML(使用Poly/ML)中打印小写希腊文
我尝试了以下方法:
print "ε"; (* Error-unprintable character found in file *)
print "\u03B5"; (* Error-Conversion exception (Invalid string constant) raised while converting \u03B5 to string *)
难道这根本不可能吗?当然,终端的工作是实际渲染字符,因此,应该可以将原始字符
我有以下代码来计算Hofstadter H序列,但是我得到了一条重载冲突错误消息。我是SML的新手,因此我确定错误指的是什么
(* Hofstadter H-Sequence *)
fun H(0) = [0]
| H(n) = if n = 0 then [0] else x :: (n - H(H(H(n - 1))));
我的目标是将每个迭代的值插入一个列表并显示它。
例:h10;-->[1,1,2,3,4,4,5,5,6,7]您正在尝试使用int->int list类型编写函数
(写
我想知道可以找到案例数量的函数。
例如,如果输入了fun(4,[1,2]),它将输出可以使用1和2转换为4的数字数。
我知道如何通过fun(x,ys)逐个比较列表中的第一个元素。
但我不知道如何将列表中的两个元素与一个元素进行比较。
在SML中是否有一种方法可以同时比较x和(y,ys)?
有人可以帮忙吗?“使用1和2可以生成4的数字的数量。”——如何生成?作为某些算术运算符的操作数?请给出一个或多个示例输出,以澄清您的任务范围。还有,到目前为止你写了什么?你在另一篇文章中回答了我。非常感谢。
有没有办法检查/测试变量的类型
我想这样使用它:
if x = int then foo
else if x = real then bar
else if x = string then ...
else .....
ML语言是静态类型的,所以不可能在不同的时间有不同的类型x有时不能有typeint,有时不能有typestring。如果需要这样的行为,通常的做法是将值包装在一个对类型信息进行编码的容器中,如:
datatype wrapper = Int of int | Real
标签: Sml
smlnjmlhigher-order-functions
我正在找人帮忙解决一个问题。我正在尝试编写一个函数,在ML中传递列表和函数。基本上,程序应该做的是获取一个列表,并通过函数运行每个元素。如果函数返回true,则元素将添加到列表中,并且在函数完成执行后返回列表。这是我的密码:
fun select(x:list, funct)= (* Define a new function that accepts a list and the prime function as a parameter*)
while (tl(x) not
这是一个仅检查前两个列表元素的curry函数
fun inn list f = f(hd(list), hd(tl(list)));
我想知道的是,我可以通过什么方式浏览其余的列表元素。
我不知道如何使它递归。
有人能帮我吗?第一句话:永远不要使用hd和tl。改用模式匹配
我现在不知道您希望函数做什么,但这里有一个函数迭代列表并将f应用于每个元素:
fun iter f l =
case l of
[] => ()
| x::xs => (f x; iter f x
我想输入两个长度相等的列表,并将一个列表的值分配给另一个列表的变量。
我想让它自动实现第一个列表作为变量列表,第二个作为值。
例如
我想将[1,2,3,4,5,6]值分配给变量列表中的元素[9,10,11,12,13,14],即。
1作为列表中的值9,2作为列表中的值10
exception error
fun assign([],_) = raise error
| assign(_,[]) = raise error
| assign(l::ls,b::ls) = (val l=b
给定SML中的以下功能:
fun i a b = let fun j()=a+1 in j end;
函数的数据类型为:
val i = fn : int -> 'a -> unit -> int
我不明白为什么int->'a->unit->int
为什么不(int*a')->unit->int,因为函数i接收两个输入 这个函数(以及SML中的任何函数)实际上是接收一个输入,因为使用了curry
从技术上讲,有一个函数取单位,它返回的函数取‘a’,它返回的函数取int
所以
可以通过和关键字在sml中定义相互依赖的数据类型。现在我有两个相互引用的结构,我看到的错误似乎是因为它是相互递归的,但我看不到一种方法来添加和,这样可能会起作用
例如:
structure Machine = struct
structure F = Frame
...
end
structure Frame = struct
...
reference to Machine.wordsize
end
这是可行的还是设计与sml不兼容?我正在从Ocaml移植代码,显然这是可
我有下面的公式
fun foo 0 = [0]
| foo num = let val l = (num mod 2)::foo(num div 2) in
rev l
end;
它应该从十进制转换为二进制。它有以下签名
val foo = fn : int -> int list
我不确定我到底在哪里出错,因为我得到的结果不正确。有人能帮我找出我在哪里出错吗?问题似乎是,在每个递归步骤中都要反转结果列表,而不是在最后只反转一次
此外
我有如下SML代码
fun fact(n) =
let fun f(n,g) = if n=0 then g(1)
else f(n-1, fn x=>g(x)*n)
in f(n, fn x=> x) end;
我想知道我的代码中需要多少空间来计算fact(n)。
是否需要O(n)?我不太清楚。是的,您编写的函数在最后计算闭包之前会创建n个闭包
以下是一个更节省空间的版本:
fun fact n =
let fun fac
如果我已经初始化了一个int*int的数据类型dataype dd=DAT,我该如何为函数初始化该类型 该类型称为Cint,而不是CI,因此您必须在需要类型的地方使用Cint:
fun cadd(a:Cint, b:Cint) =
或者,如果您想继续使用数据类型构造函数CI,则可以使用不同的语法,包括模式:
fun cadd(a as CI _, b as CI _) =
您也可以在函数中直接进行模式匹配,而不是使用以下情况:
datatype Cint = CI of int * int
下面是我正在实现的递归函数的python代码
def f(x):
return x+1
def iter(n, f,x):
if n == 0:
return x
return iter(n-1, f, f(x))
调用iter
iter(7, f, 9)
我如何用SML写它
fun iter 0 f x = x
|iter n f x = iter(n-1, f, f(x));
语法是:
fun iter 0 f x=x
|iter n f x=iter(
我有这个数据类型
datatype e = X | Const of int | P of e*e | S of e*e | M of e*e | D of e*e;
这个程序呢
val rec evl = fn (Const k)=>(fn x=>k)| X=> (fn x=>x)| P(e1,e2)=> (fn x=> (evl e1 x)+(evl e2 x))| S(e1,e2)=> (fn x=> (evl e1 x)-(evl e2
我有一个任务,涉及用SML制作教堂数字。我环顾四周,就是找不到我做错了什么。目标是生成一个函数,该函数接受int并返回一个church数字,定义为数据类型'a numeric=Num of('a->'a)->'a->'a->'a(由我的老师预定义)。然后生成第二个函数,该函数接受一个church数字并返回一个int
我以前看到过一篇带有代码的帖子:
val ZERO = C(fn (f,x) => x)
fun subCreate 0 (f,x) = x
| subCreate n
我试图定义我自己的mymod函数,其中mod通常是3 mod 2=1函数。
我不知道从哪里开始。有什么建议吗?因为你不知道从哪里开始,这里有一些提示:
1) mymod应该是中缀函数。正确的语法是
infix mymod;
fun x mymod y = ...
2) 您应该了解如何使用-、*和\实现mymod。我建议您在编写函数之前手动尝试几个示例
3) 由你来处理零除法的问题
我正在参加一个Coursera课程,我正在努力做我的家庭作业
我们必须编写一个SML程序,该程序接受一个卡片列表(根据它们的套装和等级进行分类),如果它们都有相同的颜色,则返回true,否则返回false
这是我的代码(我不明白为什么它是假的,但我退出了编程):
我不懂那种语言,但你的最后一个条件是不正确的(我想是某种Haskell):
应该是:
|x::y::xs => if card_color(x)=card_color(y) then all_same_color(y::xs)
用EQUALOP替换逗号时出现了一个错误。我不明白代码中的错误是什么 在z的声明中,power的参数周围需要括号:
val x =10;
fun power (x:int, y:int) =
if y=1
then x
else
x * power (x,y-1)
val z = power 2,3
在z的声明中,power的参数周围需要括号:
val x =10;
fun power (x:int, y:int) =
if y=1
then x
else
所以,我在SML中编写了这个快速排序函数来利用高阶函数折叠,但是它被挂在一个无限循环中,我无法确定导致它的错误逻辑。关于去哪里看有什么建议吗
(* takes in a list of numbers and an arbitrary binary relation function f *)
fun quicksort nil f = []
| quicksort [x] f = [x]
| quicksort list f =
let
(*
我试图使用“use”命令从一个文件中执行几行代码,但出现了我不理解的错误
StdIn:1.6-1.10 Error unclosed string
我到处搜索,试图找到那个错误意味着什么,但现在运气好了
请帮助“未关闭的字符串”表示您已使用“启动了一个字符串,但您没有使用另一个“关闭它
那么,在您的案例中,为什么会出现这种错误呢?显然,您确实有适当数量的“s?好吧,如果我们查看列号,我们会发现错误是关于从第一个“开始并在反斜杠后的h结束的部分,这意味着它希望字符串在那里结束
因此,基本上错误
给定SML源文件,是否可以检查(使用Poly/ML)是否定义了函数/值名称列表?如果是,怎么做
或者,我注意到您可以执行以下操作。假设我们有一个名为somefile.sml的要检查的源文件。假设我们创建文件test.sml,包含以下内容:
use "somefile"
f; (* defined in somefile.sml *)
g; (* undefined *)
然后我们运行:
use "test" handle e as SyntaxError => (print (exnMe
我写了一个函数,它用基数b和指数e进行幂运算,如下所示:
fun power b e = if e = 0 then 1 else b * power b (e-1);
显然,这对整数有效,如输出所示:
val power = fn : int -> int -> int
但是,我希望它取一个实数表示b,取一个整数表示e。我尝试使用以下方法:
fun power (b : real) (e : int) = if e = 0 then 1 else b * power b (e-
我试图编写一个SML函数,它有两个参数,第一个是
int,第二个是列表列表。目标是将第一个参数插入到第二个参数中每个列表的前面。例如,append_to_front(1,[[3,4],[6,8],][/code>应该返回[[1,3,4],[1,6,8],[1]]
我有密码:
fun append_to_front(a:int, L:int list list) =
if L = []
then []
else a::hd(L)::append_to_front(a, tl
我想在求和之前写一个函数number\u,它接受一个名为sum的int,并返回一个int n,使得列表的前n个元素相加小于sum,但列表的前n+1个元素相加为sum或更多。
这是我的密码
fun number_before_reaching_sum(sum:int,lists:int list)=
let
val sum_list=0
val n=0
in
let fun list_compute(sum_list:int,lists2:int list,n:int)=
我怎么能有多个case语句彼此不交错呢。
例如,一个玩具示例:
fun multi_cases(xs) =
case xs of
[] => 5
| x::ys => case x of
1 => 2
|_ => 3
| x::[] => case x of
1 => 5
我正在编写一个函数,该函数将获取一个列表列表,并将其合并为列表的排序对。例如[[1]、[9]、[8]、[7]、[4]、[5]、[6]]将返回[[1,9]、[7,8]、[4,5]、[6]]。这是我第一次尝试SML。我经常遇到这样的错误:运算符和操作数不一致[重载冲突]
fun mergePass[] = []
| mergePass(x::[]) = x::[]
| mergePass(x::y::Z) =
if x<y
th
是否可以在不打印签名的情况下在SML中声明函数
我发现您可以通过执行以下操作来打印字符串,而无需打印val it=():unit:
val _ = print("Test1");
是否有可能在功能上实现相同的功能?比如:
val _ = fun foo x = x + 5;
foo 10;
以下程序不会在SML中编译。
我知道我可以使用let\local,但是我不能在闭包之外使用它们。另外,我正在寻找一种不导入其他库的方法。您所要求的仅与REPL相关,因为函数签名仅打印在REPL中。如您所建
我正在尝试用sml编写一个程序,该程序包含列表的长度、列表中出现的最大数字,当然还有列表。然后计算包含所有数字的最小子列表的长度
我尝试使用滑动窗口方法,有两个索引,前和尾。前端首先扫描,当它找到一个数字时,会将它已经看到这个数字多少次写入地图。如果程序找到所有数字,则调用尾部。尾部扫描列表,如果发现某个数字的显示次数超过1,则将其删除
到目前为止,我尝试的代码如下:
structure Key=
struct
type ord_key=int
val compare=Int.comp
我想制作一个函数removeDups,如果可能的话,它将只使用模式匹配从列表中删除任何重复的元素。如果我有一个类似于[1,1,1,2,3,4,4,5,6,6,6,6,7,8]的列表,那么我希望输出是[1,2,3,4,5,6,7,8]
到目前为止,我得到的是
fun removeDups [] = []
| removeDups (x::y::xs) = y::removeDups(xs);
这给了我输出[1,2,4,4,6,6,6,8]
我理解的主要问题是跟踪一个元素,这样它就不会再重
如何声明函数,使Listn:“”a list->“”a list->bool,Listn xs和ys返回true。
示例:lisen[#“1”#“2”],[#“1”#3”]返回false,并[#“1”,#“2”[#“2”,#“1”]返回true尝试以下操作:
infix member
fun x member [] = false
| x member (y::ys) = x = y orelse x member ys;
fun listn (x::xs) ys =
我正在尝试使用动态规划计算二项式系数。我一直在犯这个错误
fun binomial(m:int, n:int, DP) =
if n = m orelse n = 0 then
Array2.update(DP, m, n, 1)
else if Array2.sub(DP, m, n) = ~1 then (
if Array2.sub(DP, m-1, n) = ~1 then
Array2.update(DP, m-1, n, binomial(m-1,
我正试图写一个函数来检查它的元素是否是交替的
此类列表的示例如下:[1,2,1,2,1,2]
我迄今为止的努力:
fun isAlternating(lst) =
case lst of
[] => true
| x::y::tail => if y <> x
then isAlternating(y::tail)
else false
我似乎错过了一个模式,但我不知道是哪一个。有人能
我需要在sml中编写一个函数,它接受一个数字并确定它是否是斐波那契数。
我已经做了斐波那契函数
fun fib 1=0
| fib 2=1
| fib n= fib (n-1)+fib(n-2);
但我想不出第一个?你有什么想法吗?这可能会对你有所帮助
fun isfib 0 = true
| isfib x =
let
fun help (i,j) = if j >= x then x = j else help (j,j+i)
in
我对SML非常陌生,我正在尝试编写一个函数,其中比较两个字符列表,例如,它从列表1中提取一个字符,并将其与列表2中的所有字符进行比较
val list1 = explode("abcdefghijklmnopqrstuvwxyz")
val list2 = explode("bcdaghklfeijonmtrqpsvuwyzx!-232=,./;'[]{}:?<")
val list1=explode(“abcdefghijklmnopqrstuvxyz”)
val list2=expl
我正在做一个作业,我必须写一个函数来计算列表的长度。这是一项琐碎的任务,但我遇到了一些我不明白的事情
我的简单代码
val len = foldr (fn(_, y) => y + 1) 0
产生此警告
警告:类型变量未通用化,因为
值限制被实例化为虚拟类型(X1、X2、…)
当我尝试在REPL中运行它时,我得到以下结果:
len [1, 2, 3, 4];
stdIn:18.1-18.17 Error: operator and operand don't agree [overloa
当我尝试使用函数List.nth时,sml shell返回以下错误消息:
- List.nth([1,2,3],0);
[autoloading]
unexpected exception (bug?) in SML/NJ: Io [Io: openIn failed on "/Users/jhr/Work/smlnj/osx-dist/smlnj.dst/sml.boot.x86-unix/smlnj/basis/.cm/x86-unix/basis.cm", No such file or
我是SML新手,我想知道如何在元组列表中获取元素。例如,在列表[(“abc”,4),(“def”,6)]中,如何提取“abc”?我试过了
x::xs => #1(x)
但我一直收到“未解决的flex记录”。有什么建议吗?您可以使用模式匹配将其提取出来
let
val lst = [("abc", 4), ("def", 6)]
in
case lst of (str,_)::xs => str
| [] => "The list is em
我正在尝试实现一个测试函数,以便在它们不相等时比较并显示错误消息:
exception AssertionErrorException of string
fun assert(testName, actual, expect) : bool =
if actual = expect
then true
else raise (AssertionErrorException (testName ^ " failed. actual: " ^ actual
如果输入是oct编号的字符串。例如,“\177”。将“\177”转换为相应的十六进制数字字符串(即“0x7F”)的最佳方式是什么
我正在SML中写文章,并查看了StringCvt,但没有找到好的解决方案 不完全确定主观上的善良,但以下是我设法想到的
- Int.fmt(StringCvt.HEX)(Char.ord(valOf(Char.fromCString("\\177"))));
val it = "7F" : string
这是我第一次使用sml
我不明白这种语法有什么问题:
fun merge (l1 : int list , l2 : int list) : int list =
if ([] , l2) then l2
else if (l1 , []) then l1
else (x :: xs , y :: ys)
if x < y then x :: (merge (xs , l2))
else y :: (merge (l1 , ys)
根据这一定义:
追加列表是列表抽象数据类型的(简单)实现,它使构造变得便宜(O(1)),但使销毁变得昂贵(O(n))。'a alistNN和'a alistNN类型定义如下:
datatype 'a alistNN = Sing of 'a | Append of 'a alistNN * 'a alistNN
datatype 'a alist = Nil | NonNil of 'a alistNN
'a alistNN类型表示“非nil”附加列表,而'a alist类型表示任意(nil或
编写一个函数allLessThan。它获取两个整数列表,并测试第一个列表中的所有整数是否小于第二个列表中的所有整数
例如,allLessThan([2,4],[6,7,8])将返回true
我尝试设置函数,让集合等于xx和yy,这样如果xx中的每个元素都小于yy中的每个元素,那么函数将返回true,如果不是,则返回false
- fun allLessThan([], yy) = true
= | allLessThan(xx, []) = false
= | allLessThan(x::
我在CPN ML中工作,这或多或少与SML相同。
我确信代码的以下部分是有效的:
color Product = string;
color Number = int;
color StockItem = record prod:Product * number:Number;
color Stock = list StockItem;
var x:StockItem; var s:Stock;
fun incrs(x:StockItem,s:Stock) =
if s=[] th
所以我有一个函数,我想写:
fn (x:'a) => ???
(type: 'a -> int)
我试过这样做:
fn (x:'a) => (x:int)
但很明显,这会返回一个匹配约束错误。那么我有什么办法可以做这件事吗
==编辑===
有没有办法“反转”功能?我的意思是具有以下类型的功能:
int -> 'a
只需返回您选择的任意整数。@AaditMShah是否有方法反转该函数?比如从int到a?是的,有。要么进入无限循环,要么抛出错误。@AaditMShah在
(*在一个月内写一个函数号,它包含一个列表
日期和月份(即整数)和
返回列表中给定月份的日期数。*)
(*以月为单位写一个函数号,它包含一个日期列表和一个月列表
(即,int列表)并返回日期列表中
在月份列表中的任何月份中。假设月份列表
没有重复编号。提示:使用上一个问题的答案。*)
当我试图编译第二个函数时,它会给我这个错误:
hw1.sml:42.5 Error: syntax error: inserting EQUALOP
[unexpected exception: Compile]
我正在为一个作业用标准ML创建一个标准ML解释器,但我似乎无法解决这个问题
我在函数eval中有这个条件:
| eval (rho, SetExp (name, value)) =
(case rhoContains rho name of
true => rhoSet rho name value
| false => globalSet (name, value))
以及以下辅助功能:
fun rhoSet [] key value
上一页 1 2 ...
4 5 6 7 8 9 10 ...
下一页 最后一页 共 21 页