【问题标题】:SML: Where is the syntax errorSML:语法错误在哪里
【发布时间】:2017-12-06 17:30:44
【问题描述】:

所以我最近学习了 sml,与 java 相比,我对如何使用它感到非常困惑。所以有人告诉我编写一个代码,该代码采用连续的值对,将它们相加并将总和插入到一个新列表中。

如果原始列表的长度为奇数,则成对添加第一个 n-1 项目,然后将 n-th 项目简单地复制到新列表的末尾。

所以到目前为止我的代码是:

fun sumpairs x =

    if null x then []
    else (if (tl x =[]) then x
    else hd x + hd(tl x) :: sumpairs(tl (tl x));

sumpairs([1,2,3]); (I want to test it on this to get something like [3,3])

但我遇到了语法错误。而且由于 sml 没有为我找到错误,所以我不知道是什么问题,或者它是否有效。我相信这应该可行。

【问题讨论】:

  • 数一下你的括号。左括号比右括号多一个。

标签: sml


【解决方案1】:

(if (tl x =[]) 中有一个不匹配的括号。
(SML 的错误消息可能是我遇到的最令人困惑的 - 我得到“EOF 处的语法错误”,这完全没用。)

使用较少的括号更容易匹配:

fun sumpairs x =
    if null x then []
    else if tl x = [] then x
    else hd x + hd (tl x) :: sumpairs (tl (tl x))

可以显示哪些括号匹配的编辑器也有帮助。
如果您找到神奇的设置,大多数现代程序员的编辑器都可以做到这一点。

我建议您熟悉模式匹配 - 使用模式通常比使用条件链更容易遵循逻辑:

fun sumpairs [] = []
  | sumpairs [x] = [x]
  | sumpairs (x::y::xs) = x + y :: sumpairs xs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多