0
funcexpr: /* This is a function: arguments -> string list */ 
    LPAREN HEAD arguments RPAREN      { let head a = [List.hd (List.hd a)] in head << $3 } 
| LPAREN REAR arguments RPAREN      { let rear b = List.tl (List.hd b) in rear << $3 } 
| LPAREN ERECT arguments RPAREN     { let erect c = List.append (List.hd c) (List.hd (List.tl c)) in erect << $3 } 
    ; 
arguments: /* This is a list of functions */ 
    PARAM           { let func p = p in func } 
| funcexpr           { [$1] } 
| arguments arguments        { List.append $1 $2 } 

Ошибка: Ошибка: это выражение имеет строковый список -> строковый список, но выражение ожидалось от строки string list -> list list list Строка типа несовместима с строкой типа списокOCaml Типы несовместимы - OCamlyacc

Я думаю, что нам нужно как-то положить func в список, но каждый способ, который я пробовал, кажется, не работает! Любая помощь приветствуется ..

ответ

0

Предполагаю, что вы пытаетесь создать функции с помощью оператора < <, который вы определили в другом месте.

К сожалению, $ 3 не представляет собой функцию, а список функций, поэтому перед составлением функций вам нужно сделать что-то до $ 3.

1

Мое предложение состоит в том, что вы меняете

let func p = p in func 

Для

[ let func p = p in func ] 

или вы могли бы использовать более компактный:

[ fun p -> p ] 

Это основано на что другие альтернативы для arguments возвращают список, но первый вариант e нет.

 Смежные вопросы

  • Нет связанных вопросов^_^