в этом случае, поскольку cll1
зависит от cll2
, cll2
от cll3
и cll3
от чего-то не связанного (т.е. функции на самом деле не такие круглые, как вы думаете), вы можете простоа также напишите
fun cll3 (s)= cll(s);
fun cll2 (s)= cll3(s);
fun cll1 (s)= cll2(s);
(конечно, в этом случае, поскольку это все то же самое, можно написать val (cll1,cll2,cll3) = (cll,cll,cll)
. но это, вероятно, не очень многозначительно.)
, чтоэто не имеет ничего общего с круговыми определениями, а не с тем, как вы сформулировали свою проблему;то же самое происходит с
val a = b
val b = 0
(если подразумевается, что a = b = 0).
здесь следует отметить, что, в отличие от функций в c, объявления в smlоценивается по порядку, и вам нужно быть явным, если вы хотите сослаться на то, что вы еще не объявили - и and
- это обычный способ сделать это, да, потому что, семантически, в любом случае, это означает, чтонабор функций предназначен для объединения, так что они могут ссылаться друг на друга.