天道酬勤,学无止境

Standard ml loop troubles

问题

我正在设置一个函数,它将模拟一个循环,直到满足一个条件。

我的总体计划是使用递归,但我试图先了解基础知识。

我得到了一个基本函数,它使用一个 If 语句来查看 X 的值是什么。 我计划使用递归来使用 X 作为计数器,但我稍后会谈到。

我现在主要担心的是,似乎我只能在“then”语句之后执行 1 个命令。

fun whileloop (x,a) =
    if (x<4)
    then a+1 
    else a;

所以这个函数工作得很好,但似乎我唯一能做的命令是 a+1。 如果我在那之后尝试执行任何其他命令,在 else 之前......它会失败。

例如,下面的代码对我来说会失败。

fun whileloop (x,a) =
    if (x<4)
    then a+1 
    print "Testing"
    else a;

我的最终目标是创建一个循环,该循环将一遍又一遍地执行多个动作,直到 X 达到零。 我需要使用不同的功能执行 5-6 个动作。

回答1

您可以使用分号运算符按顺序计算多个表达式:

( e1; e2; ...; eN )

例如,

fun iter n f = if n = 0 then () else (f n; iter (n-1) f)
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Standard ml loop troubles
    I am setting up a function that will simulate a loop until a condition is met. My overall plan is to use recursion but I am trying to get the basics down first. I got a basic function working using an If statement that is seeing what the value of X is. I plan to use recursion to use X as an counter but I will get to that later. My main concern right now is, it seems I can only do 1 command after the "then" statement. fun whileloop (x,a) = if (x<4) then a+1 else a; So this function works perfectly fine, but it seems the only command I can do is the a+1. If I try to perform any other command
  • Understanding user defined append list Standard ml
    Im having trouble understanding this implementation of lists in Standard ML. Here is how it is defined: An append list is a (simple) implementation of the list abstract data type that makes construction cheap (O(1)), but makes destruction expensive (O(n)). The 'a alistNN and 'a alist types are defined as follows: datatype 'a alistNN = Sing of 'a | Append of 'a alistNN * 'a alistNN datatype 'a alist = Nil | NonNil of 'a alistNN The 'a alistNN type represents the “non-nil” append lists, while the 'a alist type represents arbitrary (nil or non-nil) append lists. Im confused on how I would work
  • 我想用标准 ML 制作函数 maptree(I want to make function maptree with standard ML)
    问题 我想用标准 ML 制作函数 maptree。 如果函数 f(x) = x + 1; 然后 maptree(f, NODE(NODE(LEAF 1,LEAF 2),LEAF 3)); 应该做出结果 NODE(NODE(LEAF 2,LEAF 3),LEAF 4)) 我编写如下代码。 datatype 'a tree = LEAF of 'a | NODE of 'a tree * 'a tree; fun f(x) = x + 1; fun maptree(f, NODE(X, Y)) = NODE(maptree(f, X), maptree(f, Y)) | maptree(f, LEAF(X)) = LEAF(f X); 但是当我像这样执行这段代码时 maptree(f, (NODE(NODE(LEAF 1,LEAF 2),LEAF 3))); 结果不是我想要 (NODE(NODE(LEAF 2,LEAF 3),LEAF 4))) 而是 NODE(NODE(LEAF #,LEAF #),LEAF 4))。 为什么会发生这种情况(不是数字,而是#)? 回答1 #当它打印的数据结构比预设值更深时,REPL 使用 # 。 如果您增加该值,您将获得您例外的结果。 我假设您使用的是 SML/NJ,它调用该设置print.depth : sml -Cprint.depth=20 -
  • Standard ML multiple condition statement
    I am about finished with a script I am writing but I have one last condition statement to add to my function. fun whileloop (x:real,a:int,b:real) = if (a<1) then (x,a,b) else whileloop(x+1.0,a-1,b-1.0) This is my current loop I have created. It is basically accomplishing everything I need under one exception. I want it to exit its loop once the b variable hits zero[if this happens before a reaches zero). I believe Standard ML will not let me do a condition statement for a real variable...such as b<1.0. just to give you an idea of what I am trying to accomplish...I want the following code to
  • 标准 ML 多条件语句(Standard ML multiple condition statement)
    问题 我即将完成我正在编写的脚本,但我还有最后一个条件语句要添加到我的函数中。 fun whileloop (x:real,a:int,b:real) = if (a<1) then (x,a,b) else whileloop(x+1.0,a-1,b-1.0) 这是我创建的当前循环。 在一个例外情况下,它基本上完成了我需要的一切。 我希望它在 b 变量达到零时退出循环(如果在 a 达到零之前发生这种情况)。 我相信标准 ML 不会让我为真实变量做条件语句……例如 b<1.0。 只是为了让您了解我正在尝试完成的工作……我希望以下代码在下面工作: fun whileloop (x:real,a:int,b:real) = if (a<1 or b<1.0) then (x,a,b) else whileloop(x+1.0,a-1,b-1.0) 当然,由于语法和条件语句根据实数进行检查,这段代码不起作用……但是我如何在保持我的骨架完好无损的同时完成这项任务。 我只是想向现有骨架添加另一个 if 条件语句。 在 C++ 中,这是一项相当简单的任务。 回答1 这是答案。 感谢约翰科尔曼。 fun whileloop (x:real,a:int,b:real) = if (a<1 orelse b<1.0) then (x,a,b) else whileloop(x+1.0,a-1,b-1
  • 在 ML(SMLNJ) 中打开文件(Open file in ML(SMLNJ))
    问题 我需要在 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 )] (第一个数字:节点名称,第二个数字:连接节点的名称,这个鬃毛的第三个数字权重(每个()显示一个鬃毛)) 例如,这是测试输入如何读取文件以及保存文件的结构 回答1 要从文件中读取,请按照此到每行字符串列表: val infile = "c:/input.txt" ; fun readlist (infile : string) = let val ins = TextIO.openIn infile fun loop ins = case TextIO.inputLine ins of SOME line => line :: loop ins | NONE => [] in loop ins before TextIO.closeIn ins end ; val pureGraph = readlist(infile); 使用此函数,您可以将其解析为元组 (x,y,z ) : fun creatGraph([]
  • 机器学习陷入困境!谷歌大脑专家发文吐槽AI工程现状
    现代加速器编译在试图改进胶囊网络的实现,以扩大到更大的数据集时,研究团队有了这篇论文的初步想法。胶囊网络是一个令人兴奋的机器学习研究思想,其中标量值的“神经元”被小矩阵取代,使它们能够捕捉更复杂的关系。胶囊或许不是机器学习中的“下一个大事件”,但它算是创新性机器学习研究理念的一个代表性例子。虽然卷积胶囊模型需要的浮点运算(FLOPs)比卷积神经网络小 4 倍,并且训练参数少 16 倍,但是用 TensorFlow 和 PyTorch 实现的胶囊模型都比卷积神经网络模型慢得多,并且很小的模型就已耗尽了内存。到底是为什么呢?1.1 新思想往往需要新的原创性胶囊网络内部循环的简化形式类似于传统的 CNN 层中的计算,但是是对 4×4 的矩阵进行操作,而不是标量。图 1 conv2D 操作示意图当前机器学习框架的一个基本组成部分是 2D 卷积。大多数框架提供一个原语操作,输入大小为 H×W 的 N 个图像,其中每个像素的“深度”为 Ci 个通道。对于“核大小”k=3 和“步长”s=2,conv2D 计算以每个(x,y)坐标为中心的重叠的 3×3 像素块的加权和,然后产生像素深度为 Co 的 N 个较小的图像(如图 1 所示)。数学上可以表达如下:其中的点乘表示标量乘法,O,I 和 K 都是 4 维的标量矩阵。最后的代码只是围绕一个乘法累加操作的 7 个嵌套循环,但矩阵布局、矢量化
  • Scala - Two Lists to Tuple List
    Last year I had quite a bit of experience with standard ML, but I haven't done any real functional programming in about 10 months. Now that I'm on the Scala bandwagon, I'm having trouble finding an operation which I used extensively in standard ML when writing a compiler (although to be fair, this method may not have been a library method). Basically, I have two lists: List("a","b","c") List(1,2,3) And I want an operation that will give me a list of tuples like this: List(("a",1), ("b",2), ("c",3)) Is there a standard Scala function I can use to get this result? (I think we called it a zip
  • Scala-元组列表的两个列表(Scala - Two Lists to Tuple List)
    问题 去年,我在标准ML方面有相当多的经验,但是在大约10个月的时间里,我还没有进行任何真正的函数式编程。 既然我在Scala潮流中,我就很难找到在编写编译器时在标准ML中广泛使用的操作(尽管公平地说,该方法可能不是库方法)。 基本上,我有两个列表: List("a","b","c") List(1,2,3) 我想要一个可以给我这样的元组列表的操作: List(("a",1), ("b",2), ("c",3)) 我可以使用标准的Scala函数来获得此结果吗? (我认为我们在标准ML中将其称为zip函数,但这在我搜索Scala zip函数时似乎指的是不同的东西。) 回答1 没错,您可以使用zip: val a = List("a","b","c") // a: List[String] = List(a, b, c) val b = List(1,2,3) // b: List[Int] = List(1, 2, 3) a zip b // beautified a.zip(b) //res0: List[(String, Int)] = List((a,1), (b,2), (c,3))
  • ml function of type fn : 'a -> 'b
    问题 功能: fn : 'a -> 'b 现在,有没有可以定义并具有这种类型的函数? 回答1 在标准 ML 中,该函数签名有两种可能的实现。 一个使用异常,另一个使用递归: val raises : 'a -> 'b = fn a => raise Fail "some error"; (* Infinite looping; satisfies the type signature, *) (* but won't ever produce anything. *) val rec loops : 'a -> 'b = fn a => loops a; 第一个解决方案可能对定义一个辅助函数很有用,比如bug ,它可以节省一些击键: fun bug msg = raise Fail ("BUG: " ^ msg); 另一个解决方案可能对定义服务器循环或 REPL 很有用。 在 Basis 库中, OS.Process.exit就是这样一个返回未知泛型类型'a的函数: - OS.Process.exit; val it = fn : OS.Process.status -> 'a 一个小的 echo REPL 类型为val repl = fn : unit -> 'a : fun repl () = let val line = TextIO.inputLine TextIO
  • 了解用户定义的附加列表标准ml(Understanding user defined append list Standard ml)
    问题
  • 标准机器学习中的真正快速排序(True QuickSort in Standard ML)
    问题 由于 RosettaCode 的标准 ML 解决方案是根据问题(和讨论)“为什么极简主义,例如 Haskell 快速排序不是“真正的”快速排序?根据霍尔算法的复杂性表现? fun quicksort [] = [] | quicksort (x::xs) = let val (left, right) = List.partition (fn y => y<x) xs in quicksort left @ [x] @ quicksort right end 也就是说,它在有意义的地方使用了函数式编程的某些方面。 与需要封装其就地分区的 Haskell 版本不同,除了语法之外,SML 中的 Quicksort 是否需要与 C 版本有任何不同? 函数是接受数组/向量还是花费O(n)时间转换列表不太相关。 编辑:关于约翰科尔曼评论的改写问题。 回答1 这是我的尝试: fun swap(A,i,j) = let val t = Array.sub(A,i) in Array.update(A,i,Array.sub(A,j)); Array.update(A,j,t) end fun firstAfter(A,i,f) = if f(Array.sub(A,i)) then i else firstAfter(A,i+1,f) fun lastBefore(A,j,f) = if
  • ML 中 ref 函数的使用(Usage of the ref function in ML)
    问题
  • Controller file was loaded but class does not exist
    I am having trouble getting around this error in Magento: "Controller file was loaded but class does not exist". (Full stack at bottom) I am essentially trying to follow this tutorial: Create new module “HelloWorld” – in Magento. ...though I am using my own company/class names etc. instead of "hello world" I am having trouble finding good documentation on Magento in general, and I am very new at it... can anyone provide some common causes, advice, or insight? I am swamped, googled this for hours, check permissions and file structure. You name it. Trace: #0 /var/www/dev/app/code/core/Mage/Core
  • SML-NJ,如何编译独立的可执行文件(SML-NJ, how to compile standalone executable)
    问题 我开始学习 Standard ML,现在我尝试使用 New Jersey 编译器的 Standard ML。 现在我可以使用交互式循环,但是如何将源文件编译为独立的可执行文件? 例如,在 C 中,你可以只写 $ gcc hello_world.c -o helloworld 然后运行 ​​helloworld 二进制文件。 我阅读了 SML NJ Compilation Manager 的文档,但它没有任何明确的示例。 另外,是否有另一个 SML 编译器(允许独立的二进制创建)可用? 回答1 MosML 和 Mlton 都可以创建独立的二进制文件。 MosML 通过 mosmlc 命令和 MLton 通过 mlton 命令。 请注意,MLton 没有交互式循环,而是一个整体程序优化编译器。 这基本上意味着编译需要相当长的时间,但反过来它会生成非常快的 SML 程序。 对于 SML/NJ,您可以使用CM.mk_standalone函数,但在 CM 用户手册第 45 页中不建议这样做。相反,他们建议您使用 ml-build 命令。 这将生成 SML/NJ 堆图像。 堆映像必须使用@SMLload 参数运行,或者您可以使用 heap2exec 程序,前提是您拥有受支持的系统。 如果您不这样做,那么我建议您改用 Mlton。 以下可用于生成有效的 SML/NJ 堆图像: 测试.cm:
  • R predict() 函数返回错误/太多值(R predict() function returning wrong/too many values)
    问题
  • 如何修改Elastislide以使其无限循环(How to modify Elastislide so it loops infinitely)
    问题 我一直在寻找一个可同时显示多个图像,响应迅速且无限循环的图像轮播。 Elastislide似乎是最合适的(http://tympanus.net/Development/Elastislide/index2.html)。 我唯一能找到的其他实用选择是John Nikolakis的Liquid Carousel,它看起来年代久远,而且不太优雅。 我使用与http://www.w3schools.com/js/js_timing.asp上显示的clearTimeout()方法类似的方法来使Elastislide自动播放(某种程度上),但是一旦到达终点,它就会停止播放,因为计时只是调用下一个按钮(.es-nav-next)。 我希望有人可以帮助我修改Elastislide以使其无限循环-或我愿意提出其他解决方案的建议,以满足我的3个要求(上面列出)。 目前,我正在本地安装OpenCart,但可以提供一个静态示例并提供链接(如果有帮助的话)。 任何帮助或建议,将不胜感激,到目前为止,我已经在javascript上完全业余,所以花了很多时间:) 回答1 Elastislide代码已发展,上述解决方案不起作用。 因此,我开发了自己的解决方案。 此代码使elastislide自动播放,并在到达最后一张幻灯片时返回到第一张幻灯片,比无限循环卡塞尔更符合人体工程学。 此代码应在var self
  • OCaml 警告 31、编译器库和 ppx(OCaml warning 31, compiler-libs, and ppx)
    问题 我正在将我的应用程序从 OCaml 4.02.3 移植到 4.03.0。 假设您在lexer.ml有以下lexer.ml : type t = T [@@deriving sexp] let () = sexp_of_t |> ignore; print_endline "hai" 我正在尝试按以下方式运行它: ocamlbuild -use-ocamlfind -pkg ppx_sexp_conv -cflags '-w @a-4-31' lexer.byte -- 但我收到以下错误: Warning 31: files lexer.cmo and /Users/vladimir/.opam/4.03.0+flambda/lib/ocaml/compiler-libs/ocamlcommon.cma(Lexer) both define a module named Lexer File "_none_", line 1: Error: Some fatal warnings were triggered (1 occurrences) 我知道compiler-libs也有一个名为Lexer的模块,它与我的词法分析器冲突,但是: 我不是要链接编译器库。 我知道它被ppx_sexp_conv ,但它是一个预处理器,它不需要将编译器库链接到我的应用程序中。 警告 31
  • R predict() function returning wrong/too many values
    I am trying to convert Absorbance (Abs) values to Concentration (ng/mL), based on an established linear model & standard curve. I planned to do this by using the predict() function. I am having trouble getting predict() to return the desired results. Here is a sample of my code: Standards<-data.frame(ng_mL=c(0,0.4,1,4), Abs550nm=c(1.7535,1.5896,1.4285,0.9362)) LM.2<-lm(log(Standards[['Abs550nm']])~Standards[['ng_mL']]) Abs<-c(1.7812,1.7309,1.3537,1.6757,1.7409,1.7875,1.7533,1.8169,1.753,1.6721,1.7036,1.6707, 0.3903,0.3362,0.2886,0.281,0.3596,0.4122,0.218,0.2331,1.3292,1.2734) predict(object=LM
  • 无法从网页中获取某些标题(Trouble fetching some title from a webpage)
    问题 我在 php 中编写了一个脚本,以从网页上刮掉一个可见的标题,如头发掉落洗发水。 当我执行以下脚本时,出现以下错误: 注意:尝试在第 16 行的 C:\xampp\htdocs\runco​​de\testfile.php 中获取非对象的属性“nodeValue”。 链接到那个网站 我试过的脚本: <?php function get_content($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_exec($ch); $htmlContent = curl_exec($ch); curl_close($ch); return $htmlContent; } $link = "https://www.purplle.com/search?q=hair%20fall%20shamboo"; $xml = get_content($link); $dom = @DOMDocument::loadHTML($xml); $xpath = new DOMXPath($dom); $title =