2016-04-06 28 views
0

ile kullanılır. Programımda, Ocaml "# matrix81 önbellek ;;" bana hata veriyor: "Bu ifade, önbellek listesi var ama burada tip önbellek listesi ile kullanılır" Bu benim kodum. Herhangi bir yardım?Hata: Bu ifade, önbellek listesi vardır, ancak burada önbellek listesi

let rec makeLine w = 
    let y = w - 1 in 
    if w <> 0 then 0::(makeLine y) 
    else [] 

;; 


    let rec makeMatrix w h = 
     let y = h - 1 in 
     if h <> 0 then (makeLine w)::(makeMatrix w y) 
     else [] 
    ;; 

    let rec checkCache lc d t = 
     match lc with 
     [] -> 0 
     |x::xs -> if (x.difficulty = d) && (x.terrain = t) then (checkCache xs d t) + 1 
       else (checkCache xs d t) 

    ;; 

    let rec checkLine lc d t line = 
     match line with 
     []->[] 
     |x::xs -> let nt = t +. 0.5 in 
       let v = 5.0 in 
       if (nt < v) then 
       let nx = (checkCache lc d t) in 
       (nx)::(checkLine lc d nt xs) 
       else [] 
    ;; 


    let rec matrix81Aux m d lc = 
     match m with 
     [] -> [] 
     |x::xs -> let nd = d +. 0.5 in 
       let v = 5.0 in 
       if (nd < v) then 
       (checkLine lc d 1.0 x)::(matrix81Aux xs nd lc) 
       else [] 
    ;; 


    let matrix81 lc = 
     let m = makeMatrix 9 9 in 
     matrix81Aux m 1.0 lc 
    ;; 
+0

Yazınızı vandalize etmeyin: OCaml ait

Son sürümler iki farklı türde katılmaktadırlar olduğunu açıklamak (deneyin) için, tip adının bir tamsayı ekleyin. Bu siteye bir soru veya cevap gönderdikten sonra, bu mesajların o içeriğe katkıda bulunan diğer kişilerin ortak çabalarının bir parçası olduğunu unutmayın. Başkaları için yararlı olabilecek yayınlar olağanüstü durumlar dışında kaldırılmamalıdır. Gönderi orijinal yazar için artık yararlı olmasa bile, bu bilgi gelecekte benzer sorunlarla karşılaşabilecek başkalarına hala faydalıdır - bu, Stack Exchange'in temel felsefesidir. – Matt

cevap

1

O türü cache tanımını göstermek (veya hata için hat numarası vermek) yoktur.

Bu garip türdeki hata iletisinin en yaygın nedeni, aynı tür adını iki kez tanımlamanızdır. Bu sık sık üst düzeyden çalışırken ve #use ile dosya yükleme sırasında olur.

Ayrıca cache adını başka bir şekilde iki kez tanımlamanız da mümkündür.

# type cache = A | B;; 
type cache = A | B 
# let f = function A -> 3 | B -> 4;; 
val f : cache -> int = <fun> 
# type cache = C | D;; 
type cache = C | D 
# let g x = match x with C -> f x | D -> 14;; 
Error: This expression has type cache/1023 
     but an expression was expected of type cache/1018 
+0

Üzgünüm, cache yazın: type cache = {(* Örnek: *) code: string; ad: string; state: string; işletme sahibi: string; enlem: float; boylam: float; kind: string; boyut: dize; zorluk: float; arazi: float; status: string; hiddenDate: string; nFounds: int; nNotFounds: int; nFavourites: int; rakım: int } ;; –

+0

Ve Ocaml, liste önbelleğinin altını çiziyor. –