私は、次のループがあります。OCamlの表現型unmatchings
let show expr =
let rec loop acc = function
| `S -> "S"^acc
| `K -> "I"^acc
| `I -> "I"^acc
| `App(a,b) -> (loop acc a)^(loop acc b)
| `B -> "B"^acc
| `C -> "C"^acc
| `Sprim -> "S'"^acc
| `Bprim -> "B'"^acc
| `Bstar -> "B*"^acc
| `Cprim -> "C'"^acc
| `Var(a) -> a^acc
| `Con(a) -> a^acc
in
loop "" expr
をそして私は「私はこの方法で使用しなければならない」次のprintln機能を持っています。以下を印刷するためには
let println x =
printf "%s\n" (show x)
:
println (`App(`App(`App(`Bstar, `K), `K), `K));;
私はそれを実行すると、私は"printf "%s\n" (show x)"
ラインに次のエラーを取得:
Error: This expression has type
('a -> 'b -> 'c, out_channel, unit, unit, unit, 'a -> 'b -> 'c)
CamlinternalFormatBasics.fmt
but an expression was expected of type
('a -> 'b -> 'c, out_channel, unit, unit, unit, unit)
CamlinternalFormatBasics.fmt
Type 'a -> 'b -> 'c is not compatible with type unit
どこに間違いはありますか?どうすれば修正できますか?
私は次の値印刷する:println
にshow
を渡さないでください
"B* K K K”
エラーが発生する理由が不十分です。あなたの問題を自己完結型だが、pplが読むことができるように十分に小さくしてみてください。 – camlspotter
他に何を書いていますか?私はコード全体を書いた。 – yusuf
よろしくお願いします。あなたがするより良いことがないように思われるので、ただあなたは何かを理解していない、あなたはそれをdownvote。これがあなたのキャラクターです。 – yusuf