首页
学习
活动
专区
工具
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 OCamlOCaml是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.2K20

    逆波兰式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)是这样一种技术:是在将表达式赋值给变量(或称作绑定)时并不计算表达式值, 而在变量第一次被使用时才进行计算

    60040

    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 库在不同窗口之间传递数据。

    1K20

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

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

    57130

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

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

    9310

    【Python】学习笔记day3

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

    9010

    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.7K20

    go 流程控制之switch 语句介绍

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

    30930

    关于栈三种表达式

    前缀表达式(波兰表达式) 前缀表达式也称为波兰表达式,前缀表达式运算符位于操作数之前 ( 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 * 后缀表达式计算求值 从左至右扫描表达式,遇到数值时,将数字压入栈,遇到运算符时,弹出栈顶两个数,用运算符对它们做相应计算,并将结果入栈,重复执行 ,最后留在栈里元素即为结果

    30720

    使用 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表达式

    18010

    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 不会对函数实参进行表达式求值,直接把表达式传入函数体内,替换表达式形参,然后在函数内每次使用到此形参时会被求值

    73830

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

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

    25010

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

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

    6810

    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 query()函数可以灵活地根据一个或多个条件提取子集,这些条件被写成表达式并且不需要考虑括号嵌套 在后端pandas使用eval()函数对该表达式进行解析和求值,并返回表达式求值为TRUE...请Query()表达式已经是字符串。那么如何在一个字符串一个字符串?...将文本值包装在单个引号“”,就可以了 示例5 想获得即状态“未发货”所有记录,可以在query()表达式写成如下形式: df.query("Status == 'Not Shipped'") 它返回所有记录

    4.5K10
    领券