在Erlang中与字符串匹配的模式。左侧可变

时间:2015-06-29 17:38:00

标签: erlang pattern-matching

使用Erlang,我可以这样做:

"kapa" ++ D = "kapagama". % D now has a value "gama"

有没有办法放置"变量"在左侧位置?像

这样的东西
D ++ "gama" = "anyLengthStringgama".

对于此表达式,shell返回错误:

* 1: illegal pattern

奖金问题:有人可以解释为什么它不起作用吗?它背后的逻辑是什么?

2 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:7)

为此,您应该使用regular expression matching,或使用几个列表反转:

1> "amag" ++ D = lists:reverse("anyLengthStringgama").
"amaggnirtShtgneLyna"
2> lists:reverse(D).
"anyLengthString"