2016-02-18 22 views
6

Çıktı neden aşağıdakine benziyor?F # List.length her zaman 1'e geri dönüyor mu?

> List.length [1,2,3];; 
val it : int = 1 
> List.length [1,2,3,4];; 
val it : int = 1 

3 ve 4 almam bekleniyor! Yanlış işlev çağrısı mı kullanıyorum?

+0

Bu, aşağıda yanıtlanmıştır, ancak kendinizi kötü hissetmeyin. Bu gerçekten çok yaygın bir hatadır :) – TheQuickBrownFox

cevap

16

Bu işlevle ilgili değil - listenin öğelerini girme biçiminizle ilgili. ; yerine , kullanıyorsunuz! - ne yazık ki sen (..) ve pek sonbahar dışarı ile tupleları girebilirsiniz

> [1,2,3];; 
val it : (int * int * int) list = [(1, 2, 3)] 

çıktı (..) bkz:

> List.length [1,2,3];; 
val it : int = 1 
> List.length [1;2;3];; 
val it : int = 3 

nedeni [1,2,3] sadece bir öğe ile küpe bir listesi olmasıdır bunun için

; kullanırsanız, 3 öğeli listesini alın:

> [1;2;3];; 
val it : int list = [1; 2; 3] 
+1

Niçin tuple parantezlerinin isteğe bağlılığı üzücüdür? Boilerplate'e gerek yok :-) Liste daha anlamlı bir şey için kullanıldığında, türler bunun gibi hataları önleyecektir. – CaringDev

+1

Bir tutarlılık IMO'su ve okunabilirlik bir şeydir - girişi [1,2,3] '' [(1,2,3)] '(çıktıda olduğu gibi) ile karşılaştırdığınızda - ki daha fazlası açık? - Ayrıca bu sık sık görülen bir hatadır - özellikle de Haskell, Javascript veya Python gibi bir şey biliyorsanız - hepsi de ''', '…' kullanın ... – Carsten

+1

Okunabilirlik de bağlamın bir işlevidir. Burada parantez koyacağım *. Örneğin. Fonksiyon imzalarında, tip-açıklamalı tuplleri alarak, onları dışarıda bırakmak (daha iyi burada ve orada) için daha okunaklı olabilir. Yeni geliştiriciler için (1, "a"): int * string', yani ',' vs '' 'de ilk başta zor. Ancak IMO'nun bir dili, ilk öğrenme eğrisinden önce (verilen güvenlik tehlikeye girmediğinden) ne yapabildiğinize (örneğin, güzel DSL'lere) göre değerlendirilmelidir. Diğer her araçta olduğu gibi, bir kişinin de aşırı yüklenmemesi gerektiğini öğrenmesi gerekir (örn. Scala toplama operatörleri). Bunun yüzünden sakat güçler üzücü olurdu. – CaringDev

İlgili konular