3

次のように、データ型を使用して区別する deriv 関数を作成しようとしています。

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

これは a*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"))))

私のコードの一部は

fun deriv (POWER(a, b)) = MULT(RCOEFF(Real.fromInt(b)), POWER(a, b-1))

しかし、私が計算すると

deriv(POWER(VAR "x", 3))

出力は

MULT(RCOEFF 3.0 , POWER(VAR # , 3))

出力に「#」があるのはなぜですか?

助けていただければ幸いです!!

4

1 に答える 1

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
于 2013-04-14T13:23:34.997 に答える