Erlang全文合法单词搜索程序

本文介绍了一个使用Erlang实现的简单文本解析程序,该程序能够从输入文本中提取合法单词并将其存储在一个字典中,最终输出这些单词。合法单词包括字母和下划线组成的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    合法单词,这里主要指原子和变量。

    代码如下:

    %%----------------------------------------Get Words From Text-----------------------------------
f(L) ->
    Dict=main(L,[]),
    List=dict:fetch_keys(Dict),
    lists:sort(List).

cl([H|T],Parent) ->
            Parent!{H,is_letter(H)},
            cl(T,Parent);
               
cl([],Parent) ->
    Parent!over.
   
is_letter(H) ->
    L="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_",
    case lists:member(H,L) of
        true ->
            true;
        false ->
            false
    end.
main(L,L2) ->%%L2 is recommanded to be []
    S=self(),
    Dict0=dict:new(),
    cl(L,S),
    loop(L2,Dict0).
loop(L2,Dict) ->
    receive
        {H,true} ->
            L3=[H|L2],
            case dict:is_key(lists:reverse(L2),Dict) of
                true ->
                    Dict0=dict:erase(lists:reverse(L2),Dict),
                    Dict1=dict:store(lists:reverse(L3),list,Dict0),
                    put(state,true),
                    loop(L3,Dict1);
                false ->
                    Dict1=dict:store(lists:reverse(L3),list,Dict),
                    put(state,true),
                    loop(L3,Dict1)
            end;
        {_H,false} ->
            case get(state) of
                true ->
                    put(state,false),
                    loop([],Dict);
                false ->
                    loop(L2,Dict);
                undefined ->
                    put(state,false),
                    loop(L2,Dict)
            end;
        over ->
            Dict
    end.

    这个程序是比较丑陋的,因为使用了进程字典,频繁改写状态,破坏了Erlang的优美特性。

    程序的主要思想是开启一个进程去判断List中的每个字符是不是属于合法的字符(就是大小写加上下划线),将结果返回给主进程,主进程处理之后保存在搜集用的字典里,最后将键值(keys)拿出来就可以了。

   稍加改动,可以从文本中提取各种需要的模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值