Kodunuzla ilgili birçok sorun var.
Hata, for
'un hiçbir şey döndürmemesi ve bu nedenle döngünün iç kısmının tamamen yan etkide olması nedeniyle oluşur. Yani birim tip olmalı. =
kullanımınız, birim türüne sahip değildir, çünkü =
aslında eşitlik operatörüdür, iki değeri karşılaştırır ve true
veya false
döndürür.
Yanlış işleci kullanıyorsunuz. x
'a "atama" yapmaya çalıştığınız anlaşılıyor. Fakat ML'de, "değişkenlere" atayamazsınız, çünkü tanımlandıkları ve değişmeyecekleri bir değere bağlılar. Mutabilite elde etmenin bir yolu, değiştirilebilen bir hücre kullanmaktır ("referans" olarak adlandırılır): ref
işlevini, bir ilk değerden değiştirilebilen hücre oluşturmak için kullanırsınız; değerini almak için !
operatörünü; ve içteki değeri değiştirmek için :=
operatörüne. Örneğin bu şekilde
:
let f q p rho=
let x = ref [] in
if q > p then
for i=0 to rho do
x := q :: !x
done;
!x;;
sayesinde sizin Cevap ver, örneğini "!" : x: = q ::! x – kafka
@Antonio: teşekkürler – newacct