【问题标题】:sml pattern don't see bound variablesml 模式看不到绑定变量
【发布时间】:2014-10-18 21:57:08
【问题描述】:

我正在做课程作业。谁能解释一下为什么这段代码有效:

  fun remove_card(cs: card list, c: card, except:exn)=
case cs of []=>raise except
 | x::xs =>( case (x=c) of true=> xs
                | _ => x::remove_card(xs,c,except))

但这里说“模式冗余”就好像 c 未定义一样?

    fun remove_card(cs: card list, c: card, except:exn)=
case cs of []=>raise except
 | x::xs =>( case x of c=> xs
                | _ => x::remove_card(xs,c,except))

?

另一件有帮助的事情是在函数声明中更改为“cs as x::xs”,但为什么会有帮助呢?

【问题讨论】:

    标签: pattern-matching sml


    【解决方案1】:

    cs as x::xs 绑定 cs 并假设它是非空的,将 cs 的头部绑定到 x 并将尾部绑定到 xs。这只是一个方便的速记。

    您的示例中有错字,但如果您的意思是

    case x of c => xs 
    

    然后你将 c 绑定到 x,这总是成功的。

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多