Buradaki bir sorun, iki farklı türde döndüğünüzdür: boş bir liste için int veya aksi halde bir grup. Biri diğeri olmalı.
Başka bir sorun, 1 ile test
eklemeye çalıştığınız, ancak test
bir işlev değil, bir değerdir. Bir değer döndürmek için başka bir şey üzerinde test çağırmanız gerekir, ancak daha sonra bir tam sayıya eklenemeyen bir tuple döndürmesi gerekir.
Kodun ne yapmasını istediğinizi anlayamıyorum, ancak sorunuzu bu bilgilerle güncelleştirirseniz daha fazla yardımcı olabilirim.
let rec test l =
match l with [] -> 0
| x::xs -> if x > 0 then 1 + (test xs)
else test xs;;
Güncelleme: Ben
Bir tahminim böyle yazabilirim bu durumda listede pozitif sayılar, saymak istiyor olmasıdır sen netleştirmek için düzenlenmiş beri
let test l =
let rec test_helper l pos nonpos =
match l with [] -> (pos, nonpos)
| x::xs -> if x > 0 then test_helper xs 1+pos, nonpos
else test_helper xs pos 1+nonpos
in test_helper l 0 0;;
akümülatörler bu durumda çok yardımcı kullanarak şu şekildedir: sorun, yukarıdaki kodunu değiştirin. Aynı zamanda, her zaman iyi bir uygulama olan kuyruk özyinelemesini yapar.
Bu işlevin ne için döndürüleceği ile ilgili daha fazla bilgi verebilir misiniz? Tam sayı çifti neyi temsil ediyor? – goggin13
bu yüzden bir çift tamsayı (x, y) ochl içinde tuple olarak döndürmelidir, sadece karşılaştığım problemin bir tuple hesaplaması olduğunu .. böylece bir liste daha sonra bir sayıdan azsa (x +1, y) else (x, y + 1) böylece dönüş değeri (x, y) olacaktır, burada x, bir sayıdan büyük olan elemanların sayısıdır ve y, – REALFREE