在 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模块。