2016-04-06 3 views
0

У меня проблема с моей программой, когда я вызываю терминал Ocaml «# matrix81 cache ;;» он дает мне ошибку: «Это выражение имеет список кеша типов, но здесь используется с списком кеша типа» Это мой код. Любая помощь?Ошибка: это выражение имеет список типов кеша, но здесь используется с списком кеша типа

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

Пожалуйста, не хулиганить свой пост. Обратите внимание, что после публикации вопроса или ответа на этот сайт эти должности становятся частью коллективных усилий других, которые также внесли свой вклад в этот контент. Сообщения, потенциально полезные для других, не должны удаляться, кроме чрезвычайных обстоятельств. Даже если сообщение больше не полезно первому автору, эта информация по-прежнему полезна для других, которые могут столкнуться с подобными проблемами в будущем - это основная философия Stack Exchange. – Matt

ответ

1

Вы не показываете определение типа cache (или указать номер строки для ошибок).

Наиболее распространенной причиной этого странного типа сообщения об ошибке является то, что вы дважды определили одно и то же имя типа. Это часто происходит при работе с файлом и загрузкой файлов с #use.

Возможно также, что вы определяете имя cache дважды другим способом.

Последние версии OCaml добавить целое с именем типа, чтобы (попытаться) уточнить, что два различных типа участвуют:

# 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

К сожалению, кеш типа: type cache = {(* Пример: *) code: string; имя: строка; состояние: строка; владелец: строка; широта: поплавок; долгота: поплавок; вид: строка; размер: строка; трудность: поплавок; рельеф: плавающий; статус: строка; hiddenDate: string; nFounds: int; nNotFounds: int; nFavourites: int; высота: int } ;; –

+0

И Ocaml подчеркивает кеш-лист, говоря, что это ошибка –