sml代码中的语法错误

sml代码中的语法错误,sml,smlnj,Sml,Smlnj,我正在学习sml,并试图制作一个简化逻辑公式的程序。当我试图运行这段代码时,我总是会遇到同样的错误,我无法理解。它总是“错误:语法错误:删除条ID DARROW”。我已附上以下代码: - fun Simplify (Or(True, _)) = True = | Simplify (Or(_, True)) = True = | Simplify (Or(False, False)) = False = | Simplify (Or(x, False)) = (Simplify x) = | S

我正在学习sml,并试图制作一个简化逻辑公式的程序。当我试图运行这段代码时,我总是会遇到同样的错误,我无法理解。它总是“错误:语法错误:删除条ID DARROW”。我已附上以下代码:

- fun Simplify (Or(True, _)) = True
= | Simplify (Or(_, True)) = True
= | Simplify (Or(False, False)) = False
= | Simplify (Or(x, False)) = (Simplify x)
= | Simplify (Or(False, x)) = (Simplify x)
= | Simplify (Or (Var (x), Var (y))) = Or (Var (x), Var (y))
= | Simplify (Or (x, y)) = case Simplify x of
=                                       True => True
=                                       | False => Simplify y
=                                       | x' => case Simplify
=                                       | True => True
GC #0.0.0.0.2.85:   (2 ms)
=                                       | False => x'
stdIn:50.6-50.15 Error: syntax error: deleting  BAR ID DARROW
-                                       | y' => Or(x', y')
= (*And*)
= | Simplify (And(_, False)) = False
stdIn:2.1-2.8 Error: syntax error: deleting  BAR ID DARROW
stdIn:54.1-54.11 Error: syntax error: deleting  BAR ID
- | Simplify (And(False, _)) = False
stdIn:1.1-2.6 Error: syntax error: deleting  BAR ID
- | Simplify (And(True, True)) = True
= | Simplify (And(True, x)) = (Simplify x)
stdIn:1.1-2.6 Error: syntax error: deleting  BAR ID
- | Simplify (And(x, True)) = (Simplify x)
= | Simplify (And(Var (x), Var(y))) = And (Var (x), Var (y))
stdIn:1.1-2.6 Error: syntax error: deleting  BAR ID
- | Simplify (And (x, y)) = case Simplify x of
stdIn:1.1-2.6 Error: syntax error: deleting  BAR ID
stdIn:53.3-57.4 Error: syntax error: deleting  CASE ID
-                               False => False
=                               | True => Simplify y
stdIn:2.6-62.6 Error: syntax error: deleting  DARROW ID BAR
-                               | x' => case Simplify y of
=                               | False => False
stdIn:1.5-2.7 Error: syntax error: deleting  BAR ID DARROW
-                               | True => x'
=                               | y' => And(x', y')
stdIn:1.5-2.9 Error: syntax error: deleting  BAR ID DARROW
- (*Not*)
- | Simplify (Not(Not(x))) = (Simplify x)
= | Simplify (Not(True)) = False
stdIn:68.1-68.11 Error: syntax error: deleting  BAR ID
- | Simplify (Not(False)) = True
= | Simplify (Not(Var (x))) = (Not (Var x))
stdIn:1.1-68.3 Error: syntax error: deleting  BAR ID
GC #0.0.0.0.3.201:   (1 ms)
- | Simplify (Not x) = case Simplify x of
stdIn:1.1-68.3 Error: syntax error: deleting  BAR ID
stdIn:68.14-71.4 Error: syntax error: deleting  CASE ID
-                                True => False
=                               | False => True
stdIn:68.3-74.6 Error: syntax error: deleting  DARROW ID BAR
-                               | x' => Not x'
= (*general*)
= | Simplify True = True
stdIn:1.5-68.4 Error: syntax error: deleting  BAR ID DARROW
- | Simplify False = False
= | Simplify (Var(x)) = Var(x);
我添加了整个代码:

datatype formula =
True
| False
| Var of string 
| Not of formula
| And of formula * formula
| Or of formula * formula;

fun Simplify (Or(True, _)) = True
| Simplify (Or(_, True)) = True
| Simplify (Or(False, False)) = False
| Simplify (Or(x, False)) = (Simplify x)
| Simplify (Or(False, x)) = (Simplify x)
| Simplify (Or (Var (x), Var (y))) = Or (Var (x), Var (y))
| Simplify (Or (x, y)) = case Simplify x of
                    True => True
                    | False => Simplify y
                    | x' => case Simplify y of
                    | True => True
                    | False => x'
                    | y' => Or(x', y')
(*And*)
| Simplify (And(_, False)) = False
| Simplify (And(False, _)) = False
| Simplify (And(True, True)) = True
| Simplify (And(True, x)) = (Simplify x)
| Simplify (And(x, True)) = (Simplify x)
| Simplify (And(Var (x), Var(y))) = And (Var (x), Var (y))
| Simplify (And (x, y)) = case Simplify x of
                False => False
                | True => Simplify y
                | x' => case Simplify y of
                | False => False
                | True => x'
                | y' => And(x', y')
(*Not*)
| Simplify (Not(Not(x))) = (Simplify x)
| Simplify (Not(True)) = False
| Simplify (Not(False)) = True
| Simplify (Not(Var (x))) = (Not (Var x))
| Simplify (Not x) = case Simplify x of
                 True => False
                | False => True
                | x' => Not x'
(*general*)
| Simplify True = True
| Simplify False = False
| Simplify (Var(x)) = Var(x);

在使用嵌套的case语句和具有多个function子句时,也需要在其周围使用括号,因为无法区分管道(|)是否属于fun子句或case子句

另外,在
simplify(或(x,y))
的第二种情况下,您缺少
simplify
的“y”参数,并且一些嵌套的case表达式有一个起始管道,它不应该:

fun Simplify (Or (True, _)) = True
  | Simplify (Or (_, True)) = True
  | Simplify (Or (False, False)) = False
  | Simplify (Or (x, False)) = Simplify x
  | Simplify (Or (False, x)) = Simplify x
  | Simplify (Or (Var x, Var y)) = Or (Var x, Var y)
  | Simplify (Or (x, y)) = (case Simplify x of
                              True => True
                            | False => Simplify y
                            | x' => (case Simplify y of
                                       True => True
                                     | False => x'
                                     | y' => Or(x', y')))
  (*And*)
  | Simplify (And (_, False)) = False
  | Simplify (And (False, _)) = False
  | Simplify (And (True, True)) = True
  | Simplify (And (True, x)) = (Simplify x)
  | Simplify (And (x, True)) = (Simplify x)
  | Simplify (And (Var x, Var y)) = And (Var x, Var y)
  | Simplify (And (x, y)) = (case Simplify x of
                               False => False
                             | True => Simplify y
                             | x' => (case Simplify y of
                                        False => False
                                      | True => x'
                                      | y' => And(x', y')))
  (*Not*)
  | Simplify (Not (Not x)) = (Simplify x)
  | Simplify (Not True) = False
  | Simplify (Not False) = True
  | Simplify (Not (Var x)) = Not (Var x)
  | Simplify (Not x) = (case Simplify x of
                          True => False
                        | False => True
                        | x' => Not x')
  (*general*)
  | Simplify True = True
  | Simplify False = False
  | Simplify (Var x) = Var x
至少这是一种错误的数据类型:

datatype Expr = Or  of Expr *  Expr
              | And of Expr * Expr
              | Not of Expr
              | Var of Expr
              | True
              | False

在使用嵌套的case语句和具有多个function子句时,也需要在其周围使用括号,因为无法区分管道(|)是否属于fun子句或case子句

另外,在
simplify(或(x,y))
的第二种情况下,您缺少
simplify
的“y”参数,并且一些嵌套的case表达式有一个起始管道,它不应该:

fun Simplify (Or (True, _)) = True
  | Simplify (Or (_, True)) = True
  | Simplify (Or (False, False)) = False
  | Simplify (Or (x, False)) = Simplify x
  | Simplify (Or (False, x)) = Simplify x
  | Simplify (Or (Var x, Var y)) = Or (Var x, Var y)
  | Simplify (Or (x, y)) = (case Simplify x of
                              True => True
                            | False => Simplify y
                            | x' => (case Simplify y of
                                       True => True
                                     | False => x'
                                     | y' => Or(x', y')))
  (*And*)
  | Simplify (And (_, False)) = False
  | Simplify (And (False, _)) = False
  | Simplify (And (True, True)) = True
  | Simplify (And (True, x)) = (Simplify x)
  | Simplify (And (x, True)) = (Simplify x)
  | Simplify (And (Var x, Var y)) = And (Var x, Var y)
  | Simplify (And (x, y)) = (case Simplify x of
                               False => False
                             | True => Simplify y
                             | x' => (case Simplify y of
                                        False => False
                                      | True => x'
                                      | y' => And(x', y')))
  (*Not*)
  | Simplify (Not (Not x)) = (Simplify x)
  | Simplify (Not True) = False
  | Simplify (Not False) = True
  | Simplify (Not (Var x)) = Not (Var x)
  | Simplify (Not x) = (case Simplify x of
                          True => False
                        | False => True
                        | x' => Not x')
  (*general*)
  | Simplify True = True
  | Simplify False = False
  | Simplify (Var x) = Var x
至少这是一种错误的数据类型:

datatype Expr = Or  of Expr *  Expr
              | And of Expr * Expr
              | Not of Expr
              | Var of Expr
              | True
              | False

请记住添加所有代码,其中还包括您使用的数据结构。从解释器复制粘贴不是显示代码的好方法。考虑包含你的源文件,然后是你得到的错误。请记住添加所有的代码,也包括你使用的数据结构。从解释器复制粘贴不是显示代码的好方法。考虑一下你的源文件,然后是你得到的错误。我已经添加了整个代码。你能给我举个关于“嵌套case语句周围的括号”的小例子吗。谢谢。非常感谢。它现在工作得很好。我已经添加了全部代码。你能给我举个关于“嵌套case语句周围的括号”的小例子吗。谢谢。非常感谢。它现在运行得很好。