コードの一部に型定義を追加することにし、Typer を実行して開始点を取得しました (erlang 15b02、typer 0.9.4)。
すべてが問題ないかどうかを確認するためにいくつかの結果を選択しましたが、理解できない次の結果が見つかりました。
par(true, o) -> "(";
par(true, f) -> ")";
par(_, _) -> "".
仕様を生成します:
-spec par(boolean(),'f' | 'o') -> [40 | 41].
この関数はエクスポートされていないため、入力パラメーターを理解できます。私のコードは、最初のパラメーターとしてブール式を使用して関数を呼び出し、アトム o または f を 2 番目のパラメーターとして呼び出すだけです (たとえばpar(4 > P, o)
)。
しかし、なぜ戻りリストに空のリストが含まれないのでしょうか? [40 | 41 | []]
私は次のようなものを期待していました[40 | 41 | ""]
このコードは数式を出力するために使用され、優先度または演算子が十分な場合は括弧を避けます。たとえば、印刷
3 + 4 + 5 * (6 + 7) - sin( x + 7)
それよりも
3 + ( 4 + (( 5 * ( 6 + 7 )) - sin(( x + 7))))
.
テスト カバレッジの結果が示すように、最初のパラメーターとして false を指定してコードが呼び出されていることは確かです。
15..| par(true, o) -> "(";
15..| par(true, f) -> ")";
308..| par(_, _) -> "".