Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 带绑定变量的字符串匹配表达式_String_Erlang_Pattern Matching_Design Patterns - Fatal编程技术网

String 带绑定变量的字符串匹配表达式

String 带绑定变量的字符串匹配表达式,string,erlang,pattern-matching,design-patterns,String,Erlang,Pattern Matching,Design Patterns,以下shell会话显示了我希望了解的一些行为: 1> A = "Some text". "Some text" 2> "Some " ++ R = A. "Some text" 3> R. "text" 4> B = "Some ". "Some " 5> B ++ L = A. * 1: illegal pattern 语句2和语句5在语法上是否完全相同?我想用这个习惯用法从字符串中提取一些文本,其中B是从配置文件中读取的。这可能吗?我应该使用什么语法来代替上面

以下shell会话显示了我希望了解的一些行为:

1> A = "Some text".
"Some text"
2> "Some " ++ R = A.
"Some text"
3> R.
"text"
4> B = "Some ".
"Some "
5> B ++ L = A.
* 1: illegal pattern
语句2和语句5在语法上是否完全相同?我想用这个习惯用法从字符串中提取一些文本,其中
B
是从配置文件中读取的。这可能吗?我应该使用什么语法来代替上面5)中所示的语法


谢谢

编译时,将
LHS++RHS
模式扩展为
[lhs0,lhs1,lhs2 | RHS]
(其中
LHS=:=[lhs0,lhs1,lhs2]
,编译器拒绝对文本字符串/列表以外的任何对象执行此操作。理论上,它可以对变量执行此操作,但目前还不能

我认为在你的情况下,你需要做:

Prefix = read_from_config(),
TestString = "Some test string",
case lists:prefix(Prefix, TestString) of
    true ->
        %% remove prefix from target string
        lists:nthtail(length(Prefix), TestString);
    false ->
        different_prefix
end.

啊,语法糖的乐趣!谢谢。编译器不能在编译时扩展变量,因为它不知道如何扩展它们。你可以想象通过扩展到一个运行时来实现这种情况,并行遍历两个列表,当匹配的LHS用完时返回RHS tail,否则不匹配类型的操作。@Archelus打开一个功能请求时间?我很想备份它,并在运行时帮助获得此行为!