我正在尝试创建一个派生函数来区分使用数据类型,如下所示:
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)
为什么输出中有'#'?
请任何帮助将不胜感激!
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)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |