SML:带常数的模式?

SML:带常数的模式?,sml,smlnj,Sml,Smlnj,我试图在SML中编写一个模式匹配函数,但我得到了这个错误 错误:非构造函数应用于模式中的参数:- 我正在尝试这样做: fun illegal (c:char) i j n m = let fun legal (#"A") 0 j = true |legal (#"B") i 0 = true |legal (#"C") i n = true |le

我试图在SML中编写一个模式匹配函数,但我得到了这个错误

错误:非构造函数应用于模式中的参数:-

我正在尝试这样做:

fun illegal (c:char) i j n m =
    let
        fun legal (#"A") 0 j = true
           |legal (#"B") i 0 = true
           |legal (#"C") i n = true
           |legal (#"D") m j = true
           | legal c  i j     = false
     in
        if (legal c i j = false) then 0
        else i
     end

**I suspect that the problem is that my n,m are two constants that have been valued right before. Any help appreciated
(I searched online and here I added parentheses in my chars, and tried some other stuff but my error persisted)** 

当您进行模式匹配时,类似于
i
的东西不会检查它是否与现有的
i
绑定具有相同的值,而是引入了一个新的
i
绑定

如果您有:

legal (#"A") 0 j = true
你真正想要的是:

legal (#"A") 0 j2 = j = j2

我想我对我的代码说的是“如果你得到char“A”,然后是0,然后是任何数字“然后返回true…”,你是说ML试图像解j的方程一样解它?我有点困惑。我以为你在找
#”A“
0
,然后与提供给
非法的
i
相同的值。当模式匹配不使用的值时,您可能会发现使用
\uuu
很有帮助。所以
fun legal(#“A”)0j=true
变成
fun legal#“A”0=true
。额外的参数是不必要的。我认为有两种可能性:要么错误是指其他东西,要么你的原始代码有一个在你发布时被修复的拼写错误。