【问题标题】:Getting rid of synatax errors in the following small program摆脱以下小程序中的语法错误
【发布时间】:2015-06-05 16:29:53
【问题描述】:
datatype inttree = Empty | Node of int * inttree * inttree

fun insert(t,i)= if t=Empty then Node(i,Empty,Empty)
 else if t=Node(j,l,r):
        if (i=j) 
                 then t 
                 else if (i < j) 
          then Node(j,insert l i,r)
           else Node(j,l,insert r i)

语法错误是

标准输入:8.7-19.4 错误:语法错误:删除 ELSE ID stdIn:25.15-25.25 错误:语法错误:删除 FUN ID stdIn:25.32-25.36 错误:语法错误:删除 IF ID

【问题讨论】:

  • 你看到了什么语法错误?
  • 这不是您的完整程序。您必须告诉我们这些错误在您的程序中在哪里
  • 我不明白为什么这个程序不完整
  • 您的错误消息指出第 8、19 和 25 行。您只发布了 9 行代码。这意味着您没有发布您尝试编译的完整程序。

标签: sml ml


【解决方案1】:

哦,SML 错误消息的乐趣。

我会回避您的语法错误(请参阅 Gabe 的回答)并提出不同的解决方案。

使用模式匹配更容易(并且习惯性地)解决这个问题:

fun insert (Empty, i) = Node (i, Empty, Empty)
  | insert (Node (j, l, r), i) = <your code here>

(抱歉,如果语法关闭,我的 SML 有点生疏了。)
我留了一个箱子给你填写,以免完全破坏你的乐趣。

【讨论】:

    【解决方案2】:

    格式正确,这是你的函数:

    fun insert(t,i) =
        if t = Empty then
            Node(i,Empty,Empty)
        else if t = Node(j,l,r):
            if (i=j) then
                t 
            else if (i < j) then
                Node(j,insert l i,r)
            else
                Node(j,l,insert r i)
    

    你知道有什么问题吗? if t = Node(j,l,r): 没有与之匹配的 else。此外,它应该有一个 then 而不是冒号 (:)。

    【讨论】:

    • 我是 sml 的初学者。据我所知,如果没有 else,C++ 允许。请帮我纠正这个问题
    • SML 不是 C++。在 SML 中,条件是 表达式,而不是语句 - 像 C++ 的 三元运算符 (? : ),也像三元运算符一样,您不能排除 @987654327 @分支。
    猜你喜欢
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多