2011-01-22 15 views
5

Merhaba, Stack Overflow'ta ilk kez gönderiyorum ve OCamlOCaml'deki özyinelem türleri?

'da bir tür oluşturmaya çalışırken bir sorunla karşılaşıyorum. Düğümler/yapraklar/etc içeren bir tür ağaç oluşturmaya çalışıyorum. Şimdiye kadar sahip olduğum şey bu.

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a * tree) | .... 

Düğüm, adını ve başka bir ağacı bir tuple olarak içeren bir tür olması gerekiyordu. Ama bunu derlemeye çalıştığımda ağacın iki argüman gerektirdiğini söyledi. Ben de denedim:

ve hala hata alıyordum. Yanlış yaptığımı fark ettiğin bir şey var mı? Teşekkürler! Bir tür bildiriminde daha dikkat, Foo of bar * baz ve Foo of (bar * baz) aynı değildir:

type ('a, 'b) tree = Empty | Leaf of 'b | Node of ('a, 'b) tree * 'a * ('a, 'b) tree 

PS olsa

+0

Benim söz dizimi yanlıştı. Gerçekte Düğüm ('a * (' a, 'b) ağacı olmalıdır. – Brian

+1

Doğru. Gazetedeki cevabı kabul etmek kibar olur, çünkü sorunuza cevap verir. Yapraklar ve iç düğümler için farklı tipler istediğinizden emin misiniz? –

cevap

9
type ('a, 'b) tree = Empty | Leaf of 'b | Node of 'a * ('a, 'b) tree 

Muhtemelen senin Düğümler iki birden fazla çocuk sahibi istediğiniz ilk bir yapıcı Foo olduğunu iki alanlı, ikincisi sadece (bar * baz) türünde tek bir alana sahiptir.

+0

Parantezin yapıcı tanımında ihmal edilmesinin etkisini açıklayabilir misiniz? Bar * baz'ın tuplleri tanımlamanın daha basit bir yolu olduğunu düşündüm. – Antoine