2013-06-18 20 views
10

Bir hesap makinesi uygulaması yazmak için desen eşleştirmeyi kullanmaya çalışıyorum.Kayıt türü desen uyumu Ocaml

iki ana türü olarak aşağıda tanımlanan:

type key = Plus | Minus | Multi | Div | Equals | Digit of int;; 

type state = { 
    lcd: int; (* last computation done *) 
    lka: key; (* last key actived *) 
    loa: key; (* last operation actived *) 
    vpr: int (* value print on the screen *) 
};; 

let print_state s = 
    match s with 
    state (a,_,_,d) -> print_int a; //Here has the compile error 
       print_newline(); 
       print_int d; 
        print_newline();; 

Ancak, böyle bir durumu varsa:

print_state initial_state;; 

O olacak: Sonra

let initial_state = { lcd=0; lka=Equals; loa=Equals; vpr=0 } ;; 

ben işlevini çağırdığınızda derleme hatası var. Başarısız derlemenin sebebinin ne olduğunu herkes anlatabilir. Teşekkürler

Error: Syntax error 
unexpected token "(" 
+1

Ama neden desen kayıtlarına eşleştirme var? 'Lcd' öğesini 'initial_state'den çıkarmak için' initial_state.lcd' kullanın. – ben

cevap

19

A kaydı desen bir plak gibi görünür:

match s with 
| { lcd = a; vpr = d; _ } -> (* Expression *) 
+0

Teşekkürler. Sorunumu çözdüm. – yjasrc

+4

@yjasrc Modern OCaml'de ayrıca, '=' bölümünü de etiketle aynı şekilde adlandırırsanız, '= 'bölümünü atlayabilirsiniz:' ile eşleşen {lcd; vpr; _} -> print_int lcd; print_int vpr'. – lukstafi

+1

luksatfi'nin yorumuna eklemek için, aynı zamanda bir eşleşme bildirimi de gerekli değildir. 'print_state {lcd; vpr; _} = ... 'yeterli olmalı. – rgrinberg