Erlang麾下有一群“大将”,其中一员便是Eresye,专司“专家系统引擎”。
Eresye统帅一支轻骑兵,装备精良,武艺高强。
Eresye导出的内建函数,仅仅10个左右,能以极快速度搭建起专家系统的框架,并凭借Rete算法的优势,使系统高速运行。
最近,领教了Eresye的强大威力,得把感受记下来。一来作个总结,二来想看看是不是真弄明白了。一直以为,明白的标志,一是能把复杂的问题简单说清,二是要白纸黑字用笔来说。
用Eresye做了个专家系统模型,虽然十分简陋,属于玩具演示类,没有实用价值,但从中可见Eresye的工作原理和强大功能。
这个系统模拟著作权专家,对作品是否享有著作权,给出咨询判断。系统由推理机、知识库、推理规则构成。推理机是Eresye内建的,拿来用便可;知识库是断言式的事实集合,源自中国《著作权法》的条文规定;推理规则,用以根据事实知识和用户的回答,得出结论。
这里说的,没有学术理论。编程这事儿,其实无需太多理论,除非要唬人吓已。说编程的事儿,最好直接用程序代码。下面是玩具源码。
%
% c_f_2.erl
%
-module (c_f_2).
-export ([start/0,
determine_legal/2,
determine_applicable1/4,
determine_applicable2/4,
determine_applicable3/4,
determine_works1/4,
determine_works2/4,
determine_works3/4,
determine_works4/4,
determine_works5/4,
determine_works6/4,
no_copyright/2
]).
ask_yn (Prompt) ->
P = Prompt ++"( y / n ): ",
[Response | _] = io:get_line (P),
case Response of
$y -> true;
_ -> false
end.
%%%%%%% 知识(事实)库
add_works(Engine) ->
eresye:assert(Engine,{works,1,"音乐、戏剧、曲艺、舞蹈、杂技艺术作品"}),
eresye:assert(Engine,{works,2,"美术、建筑作品"}),
eresye:assert(Engine,{works,3,"摄影作品"}),