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 }

エラーを返します: エラー: この式には文字列リスト型 -> 文字列リスト型がありますが、文字列リスト型 -> 文字列リスト リスト型の式が予期されていました。文字列型は文字列リスト型と互換性がありません

どうにかして func をリストに入れる必要があると思いますが、私が試したすべての方法はうまくいかないようです! どんな助けでも感謝..

4

2 に答える 2

1

私の提案はあなたが変わることです

let func p = p in func

[ let func p = p in func ]

または、よりコンパクトに使用できます。

[ fun p -> p ]

argumentsこれは、他の選択肢はリストを返しますが、最初の選択肢は返さないという観察に基づいています。

于 2015-02-28T18:26:01.780 に答える
0

別の場所で定義した << 演算子を使用して関数を作成しようとしていると思います。

残念ながら $3 は関数ではなく関数のリストを表しているため、関数を作成する前に $3 に対して何かを行う必要があります。

于 2015-03-01T20:45:00.623 に答える