2012-04-04 28 views
8

[[]] döndüren bir işlev var ve sonucu birim sınaması olarak test etmek istiyorum. Ancak, [[]] == [[]] ifadesinin false döndürdüğünü buldum. İşte basit bir test kodu: Bu ifade yanlış olarak değerlendirilir nedenOCaml boole ifadesi [[]] == [[]]

# [[]] == [[]];; 
- : bool = false 

Birisi bana açıklayabilir misiniz?

Teşekkürler. OCC'de == operatörünün "fiziksel eşitlik" anlamına geldiği

+0

Başka bir soruda yapısal ve fiziksel eşitlik hakkında daha fazla bilgi var, http://stackoverflow.com/questions/1412668/does-have-meaning-in-oca ml/ – nlucaroni

cevap

13

Kullanım = Eğer iki değer karşılaştırmak için yapısal eşitlik beri:

let a = [[]] 
let b = a 

# b == a;; 
- : bool = true 
: referans eşitlik olduğunu

# [[]] = [[]];; 
- : bool = true 

== Çünkü aynı bellek konumuna işaret ederse, o tek gerçek döndürür

9

. Ancak, iki (fiziksel) farklı listeniz var. Muhtemelen, = tarafından test edilen "yapısal eşitlik" istersiniz.

+0

Tamam Şimdi dayanamıyorum. Ama ilk [[]] 'bir liste listesi ve ikinci' b liste listesi olduğu anlamına mı geliyor? – Atikae

+1

Evet, her bir [[] 'yeni bir liste ayırır (cf http://www.cs.jhu.edu/~scott/pl/lectures/caml-intro.html), ancak her iki liste de * aynı değildir * liste. – Matthias

+1

'[]' yapısal ve fiziksel eşitliğe sahiptir (tamsayı gibi). Yeni bir liste ayırmaz. Yeni listeyi oluşturan dış köşebentler, çünkü [[]] = ([] :: []) '. – nlucaroni