为什么我在此代码的输出中有意外的'#'?

KVV*_*KVV 3 sml smlnj

我正在尝试创建一个派生函数来区分使用数据类型,如下所示:

datatype Symex = RCOEFF of real
               | COEFF  of string
               | VAR    of string
               | POWER  of Symex * int
               | NEG    of Symex
               | PLUS   of Symex * Symex
               | MINUS  of Symex * Symex
               | MULT   of Symex * Symex
               | DIVIDE of Symex * Symex
Run Code Online (Sandbox Code Playgroud)

这是*x ^ 3 + 4.0*x ^ 2 + b*x + c的示例

PLUS (MULT (COEFF ("a"),
            POWER (VAR ("x"), 3)),
      PLUS (MULT (RCOEFF (4.0),
                  POWER (VAR ("x"), 2)),
            PLUS (MULT (COEFF ("b"),
                        VAR ("x")),
                  COEFF ("c"))))
Run Code Online (Sandbox Code Playgroud)

我的代码的一部分是

fun deriv (POWER(a, b)) = MULT(RCOEFF(Real.fromInt(b)), POWER(a, b-1))
Run Code Online (Sandbox Code Playgroud)

但是当我计算

deriv(POWER(VAR "x", 3))
Run Code Online (Sandbox Code Playgroud)

输出是

MULT(RCOEFF 3.0 , POWER(VAR # , 3))
Run Code Online (Sandbox Code Playgroud)

为什么输出中有'#'?

请任何帮助将不胜感激!

Seb*_*olm 6

SML/NJ对结构打印到控制台的深度有限制.如果达到此限制,则a #用于表示结构较大但未显示.

如果您认为限制太低,可以通过将存储的值更新为Control.Print.printDepth更适合您的值来更改限制.

Standard ML of New Jersey v110.69 [built: Mon Jun  8 14:15:08 2009]

- datatype 'a ls = Nil | Cons of 'a * 'a ls;
datatype 'a ls = Cons of 'a * 'a ls | Nil

- Cons(1, Cons(2, Cons(3, Cons(4, Nil))));
val it = Cons (1,Cons (2,Cons #)) : int ls

- Control.Print.printDepth;
val it = ref 5 : int ref

- Control.Print.printDepth := 100;
val it = () : unit

- Cons(1, Cons(2, Cons(3, Cons(4, Nil))));
val it = Cons (1,Cons (2,Cons (3,Cons (4,Nil)))) : int ls
Run Code Online (Sandbox Code Playgroud)