OCAML - Добавление кортежа в список кортежей - PullRequest
0 голосов
/ 26 мая 2020

Я действительно застрял в добавлении кортежа в список кортежей. Вот мой код.

let rec start_of_pattern = fun c index acc patterns n -> match patterns with
  | [] -> acc
  | h::t -> start_of_pattern c index [(Char.escaped c, index, h, n)]@acc t (n+1)

Я также пробовал это:

let rec start_of_pattern = fun c index acc patterns n -> match patterns with
  | [] -> acc
  | h::t -> start_of_pattern c index (Char.escaped c, index, h, n)::acc t (n+1)

Я хочу добавить к «a cc» кортеж из 4 элементов (string, int, string, int). c - это char, index a int, cc обычно список кортежей, шаблоны для строкового списка и na int.

У меня эта ошибка:

первая версия

вторая версия

Надеюсь, вы, ребята, можете мне помочь. Спасибо за внимание!

1 Ответ

2 голосов
/ 26 мая 2020

Приложение функции в OCaml имеет высокий приоритет. Итак, это выражение:

f x@y z

Анализируется следующим образом:

(f x) @ (y z)

Глядя на вашу первую попытку, мне кажется, вам нужно заключить в скобки вот так:

start_of_pattern c index ([(Char.escaped c, index, h, n)]@acc) t (n+1)

Не клянусь, что это решит все твои проблемы. Но без этих скобок похоже, что acc вызывается как функция.

...