首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在OCaml的toplevel中获得最后一个求值表达式?

在OCaml的toplevel中,可以通过使用特殊的下划线变量 _ 来获取最后一个求值表达式。这个下划线变量 _ 在OCaml中被称为“不关心”变量,它可以用来忽略某个表达式的值。

当在toplevel中执行多个表达式时,只有最后一个表达式的值会被显示出来。如果你想获取最后一个表达式的值,可以将其绑定到一个变量,而不关心变量 _ 可以用来忽略其他表达式的值。

下面是一个示例:

代码语言:txt
复制
# let x = 1 + 2;;
val x : int = 3
# let y = 3 * 4;;
val y : int = 12
# _;;
- : int = 12

在上面的示例中,我们首先定义了变量 xy 分别绑定到表达式 1 + 23 * 4 的结果。然后,通过输入 _ 来获取最后一个表达式的值,即 12

需要注意的是,不关心变量 _ 只能获取最后一个表达式的值,如果想获取其他表达式的值,需要将其绑定到具体的变量中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java的传值调用

而我在《Java中真的只有值传递么?》这篇文章中又做了一些解读,发现自己也是没有抓住重点,这才有了今天这篇文章,对之前的这篇文章做一个补充。...(以下术语来自Wiki ) 求值策略(Evaluation strategy) 在计算机科学中,求值策略(英语:Evaluation strategy)是确定编程语言中表达式的求值的一组(通常确定性的...传值调用不是一个单一的求值策略,而是指一类函数的实参在被传给函数之前就被求值的求值策略。...尽管很多使用传值调用的编程语言(如Common Lisp、Eiffel、Java)从左至右的求值函数的实际参数,某些语言(比如OCaml)从右至左的求值函数和它们的实际参数,而另一些语言(比如Scheme...总结 最后得出的结论:从语言设计的角度,Java的方法调用时参数的求值策略是传值调用(Call by value)的。

3.5K20
  • 前端专家聊JS语言家族新成员——R&B

    What is OCaml? OCaml是ML语言家族的一员。F#是微软做的一个语言,F#和OCaml基本上是一样的,OCaml对Scala语言也有很多影响。...后来在React的整个生态系统里面大家都会使用不可变的数据结构来获得更高的性能。...Problem 如果在JS中真的想要追求静态类型以及函数式编程,不一定能提高代码的可维护性。最主要的问题是JS本身缺乏静态类型、函数式编程语言级别的支持。...所以这样的特点决定了如果你要选择一个函数式语言的话,OCaml是很好的选择。 OCaml默认是纯的,但也可以在里面做副作用。Strict这一点是严格求值的,以及它是一个静态类型的。...第一个就是BuckleScript的性能非常强大,在所有编译到JS的编译器中,BuckleScript有可能是最快的。这就是它的“快速编译”。

    1.5K80

    对 王垠《对 Rust 语言的分析》的分析

    这种思路不大对,它是从像 OCaml 那样的语言照搬过来的,而 OCaml 本身就有问题。 可是在 Rust 里面,不但动作(比如 y = 6 )会返回一个值 (),你居然可以把这个值赋给一个变量。...它求值结果代表内存位置。 右边为值表达式。并且右边为值上下文。在等号右边的就一定要求值。 你现在告诉我,(y=6) 这个表达式的求值结果是什么?谁告诉你一定要等于 6 ?它只是一个赋值过程。...(12, x+y) } 「块表达式(花括号)」的求值规则是返回最后一个表达式的值。当然,前提是不加分号。 Rust 为了统一语句与表达式,使用 分号。...如果你隐性的返回函数里最后一个表达式,那么每一次看见这个函数,你都必须去搞清楚最后一个表达式是什么,这并不是每次都那么明显的。 首先,Rust 允许你在函数最后返回值加上 return。...其次,Rust 里「在函数里返回最后一个表达式」实际上只是「块表达式返回最后一个表达式」的特例而已。 很多时候,Rust 代码里使用 「块表达式」来求值,并不需要返回函数啊。

    2.3K20

    逆波兰式的java实现与计算

    定义 一个表达式E的后缀形式可以如下定义: (1)如果E是一个变量或常量,则E的后缀式是E本身。... 如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+ (a+b)*c-(a+b)/e的后缀表达式为: (a+b)*c-(a+b)/e →((a+b)...*c)((a+b)/e)- →((a+b)c*)((a+b)e/)- →(ab+c*)(ab+e/)- →ab+c*ab+e/- 算法实现 将一个普通的中序表达式转换为逆波兰表达式的一般算法是...)大于S1栈栈顶运算符优先级,则将该运算符进S1栈,否则,将S1栈的栈顶运算符弹出,送入S2栈中,直至S1栈栈顶运算符低于(不包括等于)该运算符优先级,最后将该运算符送入S1栈。...便可以按照逆波兰式的计算方法计算了! 计算方式 新建一个栈,如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。

    1.8K30

    作为测试人员,这些概念你不懂的话,你好意思说你懂java?

    匿名函数的返回类型与该主体表达式一致 如果 Lambda 表达式的主体包含一条以上语句,则表达式必须包含在花括号 {} 中(形成代码块)。...如, css, 正则表达式,sql 语句,html,xml… 2、函数式编程简介 相比于命令式编程关心解决问题的步骤,函数式编程是面向数学的抽象,关心数据(代数结构)之间的映射关系。...函数式编程将计算描述为一种表达式求值。 在狭义上,函数式编程意味着没有可变变量,赋值,循环和其他的命令式控制结构。即,纯函数式编程语言。...函数式编程中的函数,这个术语不是指命令式编程中的函数,而是指数学中的函数,即自变量的映射(一种东西和另一种东西之间的对应关系)。 也就是说,一个函数的值仅决定于函数参数的值,不依赖其他状态。...4.4 惰性求值 惰性求值(lazy evaluation,也称作 call-by-need)是这样一种技术:是在将表达式赋值给变量(或称作绑定)时并不计算表达式的值, 而在变量第一次被使用时才进行计算

    60540

    Python 图形化界面基础篇:在不同窗口之间传递数据

    在本文中,我们将深入研究如何使用 Python 的 Tkinter 库来实现在不同窗口之间传递数据,并演示如何在应用程序中实现这一功能。...以下是一个示例,演示如何创建两个窗口: # 创建窗口A window_a = tk.Toplevel(root) window_a.title("窗口A") # 创建窗口B window_b = tk.Toplevel...以下是一个示例,演示如何在窗口之间传递文本数据: # 共享的数据变量 shared_data = tk.StringVar() # 在窗口A中设置数据 def set_data_in_window_a...以下是一个示例,演示如何在窗口 A 和窗口 B 中创建按钮,并在按钮点击时执行数据操作: # 在窗口A中创建按钮来设置数据 set_data_button_a = tk.Button(window_a,...最后,启动了 Tkinter 的主事件循环,使窗口变得可交互。 结论 在本文中,我们学习了如何使用 Python 的 Tkinter 库在不同窗口之间传递数据。

    1.1K20

    简单又复杂的“运算符”,建议你看一哈

    其中有三点需要注意: 整数间的除法采用的是取整的方式,而不是四舍五入的方式,如 5/3 = 1 浮点数间的除法则能获得一个相对逼近结果的值,如5.0/3.0 = 1.666667 求余运算符要求 % 两边的操作数都要是整数...就是遇到不确定的优先级直接用括号把想优先计算的括起来~ ? 1.3 运算中的类型转换 当一个运算符的几个操作数类型不同时(如 1 + 1.5),编译器需要将它们转换为共同的某种数据类型,才能进行运算。...3.1 短路求值 短路求值又称最小化求值,是一种逻辑运算符的求值策略。只有当第一个运算数的值无法确定逻辑运算的结果时,才对第二个运算数进行求值。C语言对于逻辑与和逻辑或采用短路求值的方式。...比如说在 3>1 && 1表达式的取值的,所以还有根据后面的运算数求值;但是对于 3 == 1 && 1 一个运算数字就可以判断该逻辑表达式为假,...例如: “AC”的ASCII码值比B小,那么后面的就不在比较了 “ACA”最后一个前面的字符串已到末尾,所以小。 又比如下面这个例子 ?

    58830

    OpenWrt make menuconfig 构建过程「建议收藏」

    OpenWrt make menuconfig 构建过程 1.课题背景 之前在《20190614 OpenWrt如何添加驱动以及应用程序 谢艺华-遗留问题解答》文档的问题7中,承诺要写一个关于make...发现menuconfig的目标在topleve.mk中。debug.mk和depends.mk只是一些变量和函数的定义。所以我们重心就是在toplevel.mk上。...2.2 toplevel.mk 我们可以看到menuconfig的目标依赖和命令如下: scripts/config/mconf是该文件中一个目标,如图: 它的作用就是编译,再scripts/config...prepare-tmpinfo是该文件中的一个目标,待会再陈述。 FORCE作用是强制去执行,因为我们知道,Makefile的原理是,只有当依赖文件中比目标文件要新,才会去执行相应的命令。...以’call (GREP_STRING)’字符串进行过滤,将其保存到 之前《如何在OpenWrt中添加应用程序和驱动程序》的ppt中介绍过,添加的每个Makefile在最后一句都是有 (eval (call

    3.9K20

    听GPT 讲Rust源代码--compiler(29)

    这个文件定义了一些工具函数和结构体,用于支持常量求值的各个方面,如类型处理、数值计算、常量折叠、符号表达式求值等。...它实现了 Visitor trait,通过遍历常量表达式的语法树来查找并处理所使用的参数。主要的目标是在必要时对参数进行替换,以便获得正确的常量值。...在projection.rs文件中,有几个与Projectable有关的特质,我们来看一下它们的作用: Project:定义了如何通过字段名从结构体中获得一个字段。...该枚举的每个变体与一个具体的类型关联。 最后,Operand是另一个枚举,用于表示解释执行器中的操作数。操作数可以是一个立即数,也可以是一个指向内存地址的引用。...object特性表示一个类型是一个对象,即有运行时的大小和方法。Writeable特性定义了可以将对象写入内存位置的行为。 最后,让我们来介绍MemPlaceMeta,Place这两个枚举。

    9810

    【Python】学习笔记day3

    -5 算术运算符的运算顺序: 先算乘方,然后是乘除,最后算加减....如果直到最后一个字母都相同,则两字符串相等. 字符串在字典上越靠前,就越小,越靠后,就越大. 注意:中文字符串在Python中可以比较大小,但比较的结果没有任何意义....短路求值: 是逻辑运算符中的重要细节. 对于and操作来说,如果左侧表达式为False,那么整体的值一定是False,右侧的表达式不必求值....对于or操作来说,如果左侧表达式为True,那么整体的值一定是true,右侧的表达式不必求值....因此=左侧必须是变量,不能是无法修改的常量或常量表达式. 使用复合赋值运算符时程序会先读取变量,然后计算,最后赋值,因此必须保证左侧的变量是已经被定义过的,否则程序就会因为第一步读取变量失败而报错.

    9110

    go 流程控制之switch 语句介绍

    最后,我们再来看 switch 语句的执行流程: 首先,switch 语句会用 expr 的求值结果与各个 case 中的表达式结果进行比较,如果发现匹配的 case,也就是 case 后面的表达式,或者表达式列表中任意一个表达式的求值结果与...在带有表达式列表的 case 语句中,Go 会从左到右,对列表中的表达式进行求值,比如示例中的 case2_1 函数就执行于 case2_2 函数之前。...而且,在这里 case2 中的代码分支也显式使用了 fallthrough,于是最后一个代码分支,也就是 default 分支对应的代码也被执行了。...这个表达式中的 x 必须是一个接口类型变量,表达式的求值结果是这个接口类型变量对应的动态类型。 什么是一个接口类型的动态类型呢?我们简单解释一下。...奇怪,这个输出的值与我们的预期的好像不太一样。这段代码中,切片中的第一个偶数是 6,而输出的结果却成了切片的最后一个偶数 12。为什么会出现这种结果呢?

    33330

    使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:致谢到第四章

    错误不会损坏你的计算机。只需在下一个 >>> 提示符下正确地重新输入指令到交互式 shell 中。 在变量中存储值 当一个表达式求值为一个值时,你可以通过将其存储在变量中来稍后使用该值。...总结 在本章中,你学习了编写 Python 指令的基础知识。因为计算机没有常识,只能理解特定的指令,Python 需要你准确告诉它要做什么。 表达式是值(如2或5)与运算符(如+或-)的组合。...在下一章中,你将学习一些更基本的概念,并编写你的第一个程序。你将学习如何在表达式中处理文本。Python 不仅仅局限于数字;它不仅仅是一个计算器!...函数调用中的表达式 Hello World 程序的最后一行是另一个print()函数调用: print('It is good to meet you, ' + myName) 表达式'It is good...使用条件检查 True 或 False 条件是一个将两个值与比较运算符(如)组合的表达式,并求值为布尔值。条件只是另一个名称,用于求值为True或False的表达式。

    19310

    Scala的基础概念

    ,即函数中可以定义函数,有变量的地方都可以使用函数,都是等同的 高阶函数 函数作为一个函数的输入或另一个函数的输出 闭包 closure 表达式求值 函数式编程中,一切都是表达式,表达式求值策略...: 严格求值:call by value 非严格求值:call by name 惰性求值 定义表达式时不会立即求值,只在第一次调用时才求值 递归函数 函数式编程中没有循环语句,全部的循环用递归实现...scala的类都是其子类 Null 所有引用类型的最后一个子类 Nothing 所有类型的最后一个子类(既是AnyVal又是AnyRef的子类) NumericTypes 对于数值类型:低精度可以赋值给高精度...:{exp1;exp2} 多个表达式在一行2时需要分号分割,代码块本事也是一个表达式 最后的求值,是最后一个表达式 函数 定义函数的方式: def functionName(param:paramType...call by value 对函数实参求值,仅求一次,求得的值直接替换函数中的形式参数 call by value 不会对函数实参进行表达式求值,直接把表达式传入函数体内,替换表达式的形参,然后在函数内每次使用到此形参时会被求值

    74330

    关于栈的三种表达式

    前缀表达式(波兰表达式) 前缀表达式也称为波兰表达式,前缀表达式的运算符位于操作数之前 如 ( 3 + 4 ) * 5 - 6 对应的前缀表达式为 - * + 3 4 5 6 前缀表达式的计算机求值...从右至左扫描表达式,遇到数值时,将数字压入栈中,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算,并将结果入栈,重复执行 ,最后留在栈里的元素即为结果 如 (3 + 4 )5 - 6 的前缀表达式为...完成一个中缀表达式的计算(https://www.zihanzy.com/articles/327) 为了方便,一般我们要将中缀表达式,转换为前缀或后缀表达式在给计算机进行运算。...如 完成一个后缀表达式的计算 (https://www.zihanzy.com/articles/331 ) 后缀表达式(逆波兰表达式) 后缀表达式也称为逆波兰表达式与前缀表达式相似,只是运算符位于操作数之后...c - d * 后缀表达式计算求值 从左至右扫描表达式,遇到数值时,将数字压入栈中,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算,并将结果入栈,重复执行 ,最后留在栈里的元素即为结果 如

    31020

    计算机初级选手的成长历程——操作符详解(3)

    今天咱们要对操作符的内容进行一个收尾。在前两篇的内容中我们详细介绍了10类操作符及其相关的知识点,我们学习这些操作符的目标最终还是为了对表达式进行求值。...在学习C语言的过程中,我们在做习题的时候,或者在写代码的时候,会遇到比较简单的表达式如a+b、c^d这种只有一个操作符的表达式; 我们还会遇到比较复杂的表达式如++a*b^c>>2这种有多个操作符的表达式...下面我们就来介绍一下如何利用这些操作符对表达式求值; 表达式求值 对表达式的求值内容,我们分为两个区块介绍,一个是简单的表达式求值,一个是复杂的表达式求值。...对于上述这种多类型的表达式求值,我们在对其求值的过程中需要将它们转化成其它的类型。...C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。

    26210

    【数据结构】你知道波兰表达式和逆波兰表达式吗?我才知道原来栈在表达式求值中还能这样使用……

    在今天的内容中我们将介绍栈的另一种应用——在表达式求值中的应用。...当你有这个疑问时,我要恭喜你,你现在已经开始思考栈如何在表达式求值中进行应用了。那么接下来,就让咱们一起来探讨一下这个问题…… 一、表达式的形式 对于表达式而言,它本身也是有多种形式的。...表达式求值是程序设计语言编译中一个最基本的问题,它的实现是栈引用的一个典型范例。...,对于前缀表达式演示的例子中给出的前缀表达式:"*/-+abcde"我们可以通过一个存放操作符的栈即可实现表达式的求值,求值的基本逻辑如下所示: 表达式从左往右进行扫描; 遇到操作符时入栈,遇到第一个操作数时操作符出栈...while (scanf("%s", ch) == 1) { } } 这里我简单解释一下这个while语句: 对于库函数scanf而言,当他在调用成功时会返回占位符的个数,如这里只有一个占位符%s,

    8510

    Python数值运算与赋值的快捷方式

    求值顺序8 如果你有一个诸如 2 + 3 * 4 的表达式,是优先完成加法还是优先完成乘法呢?我们的高中数学知识会告诉我们应该先完成乘法。这意味着乘法运算符的优先级要高于加法运算符。...下面将给出 Python 中从最低优先级(最少绑定)到最高优先级(最多绑定)的优先级表。这意味着,在给定的表达式中,Python 将优先计算表中位列于后的较高优先级的运算符与表达式。...这意味着具有相同优先级的运算符将从左至右的方式依次进行求值。如 2 + 3 + 4 将会以 (2 + 3) +4 的形式加以计算。...这便是一个 Python 是如何让程序员的生活变得更加便捷美好的范例。 总结 我们已经了解了如何使用运算符、操作数与表达式——这些是我们构建任何程序的基本块。...接下来,我们将看到如何在程序中善加利用这些语句。

    1.2K10

    10个快速入门Query函数使用的Pandas的查询示例

    9999 x 12数据集,是使用Faker创建的,我在最后也会提供本文的所有源代码。...在开始之前,先快速回顾一下pandas -中的查询函数query。查询函数用于根据指定的表达式提取记录,并返回一个新的DataFrame。表达式是用字符串形式表示的条件或条件的组合。...在后端pandas使用eval()函数对该表达式进行解析和求值,并返回表达式被求值为TRUE的数据子集或记录。所以要过滤pandas DataFrame,需要做的就是在查询函数中指定条件即可。...请Query()表达式已经是字符串。那么如何在另一个字符串中写一个字符串?将文本值包装在单个引号“”中,就可以了。...示例5 想获得即状态“未发货”所有记录,可以在query()表达式中写成如下的形式: df.query("Status == 'Not Shipped'") 它返回所有记录,其中状态列包含值 - “未发货

    4.4K20
    领券