У меня есть этот сегмент функции:OCaml ошибка типа по шаблону
and interpret_read (id:string) (mem:memory)
(inp:string list) (outp:string list)
: bool * memory * string list * string list =
match inp with
| [] -> raise (Failure "unexpected end of input")
| head :: tail -> (true, (append mem (id, int_of_string head)), tail, outp)
Тип памяти определяется следующим образом:
type memory = (string * int) list;;
Когда я пытаюсь #use исходный код я получаю следующее сообщение об ошибке:
Error: This expression has type 'a * 'b
but an expression was epected of type (string * int) list
Я еще новичок в OCaml, так как я понимаю «а и» б родовые типы, и они должны быть определить d как строка и int, прежде чем они могут быть добавлены в mem. Я чувствую, что это понимание не совсем точно, потому что если бы это было, то идентификатор case уже должен быть определен как строка, а int_of_string head должен быть int. Может ли кто-нибудь помочь мне разобраться в моем замешательстве?
EDIT: Я изменил функцию к следующему:
and interpret_read (id:string) (mem:memory)
(inp:string list) (outp:string list)
: bool * memory * string list * string list =
match inp with
| [] -> raise (Failure "unexpected end of input")
| head :: tail -> (true, mem :: (id, int_of_string head), tail, outp)
И я получаю следующее сообщение об ошибке:
This expression has type memory = (string * int) list
but an expression was expected of type string * int
Это не имеет смысла для меня, потому что он должен быть памяти типа.
Если изменить функцию на следующее:
and interpret_read (id:string) (mem:memory)
(inp:string list) (outp:string list)
: bool * memory * string list * string list =
match inp with
| [] -> raise (Failure "unexpected end of input")
| head :: tail -> (true, (id, int_of_string head), tail, outp)
Затем я получаю следующее сообщение об ошибке:
This expression has type 'a * 'b
but an expression was expected of type memory = (string * int) list
Что и тип Выражение просто было! Там определенно что-то мне не хватает здесь, но я не могу понять это.
Да, извините, добавлено. Как же добавить одну пару? –
Я полагаю, что просто использовал бы «::»? –
Я внес изменения в OP, пожалуйста, посмотрите, если у вас есть время –