在 Erlang 中与字符串进行模式匹配。左侧位置可变
Pattern matching with string in Erlang. Variable in left position
使用 Erlang 我可以做这样的事情:
"kapa" ++ D = "kapagama". % D now has a value "gama"
有没有办法把 "variable" 放在左边的位置?像
D ++ "gama" = "anyLengthStringgama".
对于这个表达式 shell returns 一个错误:
* 1: illegal pattern
奖金问题:有人可以解释为什么它不起作用吗?其背后的逻辑是什么?
为此,您应该使用 regular expression matching,或者使用几个列表反转:
1> "amag" ++ D = lists:reverse("anyLengthStringgama").
"amaggnirtShtgneLyna"
2> lists:reverse(D).
"anyLengthString"
"kapa" ++ D = "kapagama".
只是
的语法糖
[$k, $a, $p, $a | D] = "kapagama".
这只是
的语法糖
[$k|[$a|[$p|[$a|D]]]] = "kapagama".
此代码没有对应的代码:
D ++ "gama" = "kapagama".
这可以作为语法糖。所以正如 Steve Vinoski 所写,你必须使用 lists:reverse/1
"amag" ++ D = lists:reverse("kapagama"), lists:reverse(D).
或使用re
模块。
使用 Erlang 我可以做这样的事情:
"kapa" ++ D = "kapagama". % D now has a value "gama"
有没有办法把 "variable" 放在左边的位置?像
D ++ "gama" = "anyLengthStringgama".
对于这个表达式 shell returns 一个错误:
* 1: illegal pattern
奖金问题:有人可以解释为什么它不起作用吗?其背后的逻辑是什么?
为此,您应该使用 regular expression matching,或者使用几个列表反转:
1> "amag" ++ D = lists:reverse("anyLengthStringgama").
"amaggnirtShtgneLyna"
2> lists:reverse(D).
"anyLengthString"
"kapa" ++ D = "kapagama".
只是
的语法糖[$k, $a, $p, $a | D] = "kapagama".
这只是
的语法糖[$k|[$a|[$p|[$a|D]]]] = "kapagama".
此代码没有对应的代码:
D ++ "gama" = "kapagama".
这可以作为语法糖。所以正如 Steve Vinoski 所写,你必须使用 lists:reverse/1
"amag" ++ D = lists:reverse("kapagama"), lists:reverse(D).
或使用re
模块。