syntax-error - sml 中的语法错误 : Inserting LOCAL

标签 syntax-error sml

以下方法确定可以从列表的开头开始相加多少个数字而不加起来为 4:

number_before_Reaching_sum (4, [1,2,3,4,6]);
should return : val it = 2 : int


fun number_before_reaching_sum (sum : int * int list) =
    let val len_orig_list = length (#2 sum)
    in fun num_bef_reach_sum (sum) =
           if #1 sum <= 0
           then len_orig_list - (length (#2 sum)) - 1
           else num_bef_reach_sum (#1 sum - hd (#2 sum), tl (#2 sum))
    end

syntax error: inserting LOCAL
syntax error found at EOF



我似乎无法在此代码中找到错误。我有一些使用 Python 的经验,但刚刚开始学习 sml。我很喜欢它,但我不明白所有的错误信息。我真的花了几个小时在这上面,但我认为我知道的不够多,无法解决我的问题。我尝试与本地交换 let,但仍然出现语法错误(equalop)。我认为 in 和 end 之间的函数是表达式而不是声明。但我将不胜感激对此的任何评论。如果您想出替代代码,如果您在不使用更高级功能的情况下这样做会很棒,因为我只是想了解基础知识:-)

最佳答案

你可能是这个意思:

fun number_before_reaching_sum (sum : int * int list) =
    let 
        val len_orig_list = length (#2 sum)
        fun num_bef_reach_sum (sum) =
           if #1 sum <= 0
           then len_orig_list - (length (#2 sum)) - 1
           else num_bef_reach_sum (#1 sum - hd (#2 sum), tl (#2 sum))
    in 
        num_bef_reach_sum (sum)
    end

let … in … end , let 之间的部分和 in用于局部定义; in 之间的部分和 end用于将作为 let … in … end 评估的表达式表达式(这个结构确实是一个表达式)。

想想let … in … end作为一个可能复杂的表达式。您将表达式的一部分提升为定义,然后使用对这些定义的引用重写复杂的表达式。这有助于通过折叠一些子表达式来编写更短的表达式。当需要递归时也需要此构造(递归需要定义名称)。

另一种理解它的方法是作为匿名函数的应用程序,其参数绑定(bind)是这些定义。

前任。
let
   val x = 1
   val y = 2
in
   x + y
end

和写一样
(fn (x, y) => x + y) (1, 2)

这和写作一样
1 + 2

您错误地将定义放在整个计算结果的表达式的位置。

(注意我没有检查函数的逻辑,因为问题是关于语法的)

关于syntax-error - sml 中的语法错误 : Inserting LOCAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26045700/

相关文章:

mysql - 执行内部连接时 mysql 的语法错误

mysql - 创建 mysql 表时出现错误 1064 (42000)

php - PHP : Parse Error: unexpected T_DOUBLE_ARROW

sml - 是什么导致我的 SML 变量未绑定(bind)?

functional-programming - 静态 "extend"是一种没有间接麻烦的记录数据类型

sml - 定义curry风格的函数时可以声明参数的类型吗?

functional-programming - SML 中绑定(bind)的值(value)?

java - 您的 SQL 语法有误; ...在第 1 行的 '[C@f8d6792' 附近

PHP MySQL 请求错误 : Parse error: syntax error, 意外 '%'

sml - 令人困惑的 SML 语句