复杂模式匹配

Asl*_*986 2 haskell

haskell有可能匹配复杂的模式吗?

我的意思是,我有一个逗号分隔符值(CSV)文件:

name,ID,fieldA,fieldB
Run Code Online (Sandbox Code Playgroud)

是否可以编写如下函数:

getName (n:',':xs) = n
Run Code Online (Sandbox Code Playgroud)

哪里n不是单个元素而是列表?

pig*_*ker 6

当我在20世纪80年代成为一个小男孩时,我实现了一种具有复杂模式的功能语言.它等于允许++模式.结果模式是模糊的,因此匹配涉及回溯搜索过程:程序员可以有效地指定是否最小化或最大化与++左边的模式匹配的前缀的长度.该语言具有"模式保护"的形式,因此可以测试候选匹配以查看后续计算是否成功并且在失败的情况下被拒绝.由此产生的程序通常在其意义上是明显的.这很有趣.

这些天,当我遇到这样的问题时,我会伸手去拿span,如果不能削减它,我会使用解析器组合器.

span :: (a -> Bool) -> [a] -> ([a], [a])
Run Code Online (Sandbox Code Playgroud)

span,应用于谓词p和列表xs,返回一个元组,其中第一个元素是满足p的元素xs的最长前缀(可能为空),第二个元素是列表的其余部分

因此,特别是span (/= ',')将a String分成第一个逗号之前的任何内容(或者如果没有逗号则为整个内容),其余的(如果有逗号则以逗号开头).

如果这不会削减它,我使用解析器组合器.

但我总是记得它过去很简单.