我最近開始研究Erlang並遇到了一個我無法解釋的奇怪異常。模式匹配Erlang字符串作爲函數列表
我的源代碼如下:
-module(balanced_brackets).
-author("Irrelevant").
-compile(export_all).
is_balanced(String) -> is_balanced(String, 0, 0).
is_balanced([H | T], Opening, Closing) when H =:= "{" ->
is_balanced(T, Opening + 1, Closing);
is_balanced([H | T], Opening, Closing) when H =:= "}" ->
is_balanced(T, Opening, Closing + 1);
is_balanced([], Opening, Closing) -> (Opening - Closing).
非常基本的代碼,以計算一個串關閉和打開大括號的數目。
在二郎殼,當我嘗試調用的函數is_balanced這樣: balanced_brackets:is_balanced("{}").
以下則輸出錯誤:
** exception error: no function clause matching balanced_brackets:is_balanced("{}",0,0) (balanced_brackets.erl, line 7)
然而,如果我傳遞參數作爲顯式列表,模式匹配正常工作: balanced_brackets:is_balanced(["{", "}"]).
是不是Erlang字符串只是簡單地列出inte rnally?爲什麼模式匹配使用構造[H | T]
的字符串是不正確的?
執行BIF is_list("{}").
返回true
。
我會真誠地感謝某人對此例外的解釋。
謝謝。
Erlang/OTP 17 [erts-6.2] [source-aaaefb3] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]
就是這樣!謝謝你的簡潔解釋。標記爲已接受。 – user3813812
,或者您可以將H與$ {比較,以另一種方式表示123,但將其顯示爲字符。 – Pascal