2016-03-29 21 views
0

Ben fasulye için basit bir derleyici oluşturmak için ocaml kullanıyorum. fasulye, her tip tanımı,Birbirini oluşturan tür nasıl tanımlanır

  1. kelime 'Typedef',
  2. tip özellikleri arasında

  3. bir tanımlayıcı içerir.

herhangi birinde A tipi özellikleri:

1.the anahtar kelimelerin bool 'veya 'int' çevrili alan tanımlarının

2.a gibi virgül {ve}

3.an tanımlayıcı iki tip böyle tanımlamak istediğiniz

:

type field_def = (ident * typespec) 

type typespec = 
    | Bool 
    | Int 
    | Tident of ident 
    | Tfield_def of field_def list 

type typedef = (ident * typespec) 

Alan_def tanımında bir yazı kullanıyorum ancak bir sonraki tanımda tanımladığımdan, her zaman türünde birleşik hata görünecektir. Bunu nasıl çözebilirim? Eğer birbirlerine bağlıdır türleri oluşturmak istediğinizde

cevap

2

, sen and kullanmalısınız:

Bu karşılıklı özyinelemeli fonksiyonlar tanımlamak istediğinizde aynı şey
type a = A | OfB of b 
and b = B | OfA of a 

:

let rec is_even n = n = 0 || is_odd (n - 1) 
and is_odd n = n <> 0 && is_even (n - 1)