首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SML如何计算传递给运行函数的参数?

SML如何计算传递给运行函数的参数?
EN

Stack Overflow用户
提问于 2017-07-27 13:13:02
回答 1查看 76关注 0票数 0

我编写了两段不同的代码,试图找出SML在函数参数方面使用的替换v.s.求值顺序。但结果让我很困惑。

玩具功能如下所示

代码语言:javascript
复制
fun pow x y = if y=0 then 1 else x * (pow x y-1));

它只在环绕表达式时才能正常工作,即y-1带有parens。因此,我用一个简单的打印语句来补充它,以跟踪发生了什么。

代码语言:javascript
复制
fun pow x y = (print("y is: "^ Int.toString(y)^"\n");
if y = 0 then  1 else x * (pow x y-1))

每次调用函数时,它都会像值y一样运行(显然y-1在这里没有被正确地计算或解析为一个整体)。

不过,我在下面编写的另一段虚拟代码的工作方式完全超出了我的预期。

代码语言:javascript
复制
fun foo x y= x+y;
val res= foo 2 3-9

res = -4,它不以与上面相同的逻辑运行。

任何有关这方面的见解都将不胜感激!!

(我读过一些简单的例子,说明添加parens可以确定论点的结尾,但并不那么令人信服)

EN

回答 1

Stack Overflow用户

发布于 2017-07-27 13:29:16

pow x y - 1等同于(pow x y) - 1。foo示例也是如此,但是2 + (3 - 9)(2 + 3) - 9的结果实际上是相同的,这就是为什么您看不到区别的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45351859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档