SML:带常数的模式?
我试图在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
错误:非构造函数应用于模式中的参数:-
我正在尝试这样做:
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
。额外的参数是不必要的。我认为有两种可能性:要么错误是指其他东西,要么你的原始代码有一个在你发布时被修复的拼写错误。