首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWI Prolog中的专家系统

SWI Prolog中的专家系统
EN

Stack Overflow用户
提问于 2014-12-18 23:34:05
回答 1查看 1.1K关注 0票数 1

我尝试在SWI Prolog中实现简单的专家系统。本系统从键盘读取输入数据,并查找语言。这是我的代码:

代码语言:javascript
复制
/* Paradigms */
paradigm('Ada', 'Imperative').
paradigm('C', 'Imperative').

/* Typization */
typization('Ada', 'Statical').
typization('C', 'Explicit').

/* Compiler */
compiler('Ada', 'OpenSource').
compiler('C', 'DebugPosibility').

/* Memory */
memory('Ada', 'Stack').
memory('C', 'Pointer').

language(L, P, T, C, M) :- paradigm(L, P), typization(L, T), compiler(L, C), memory(L, M).

run :- write('\nChoose language paradigm:\n1. imperative\n2. object-oriented\n3. distributed\n4. reflexive\n5. declarative\n6. functional\n7. general programming\n'), read(P),
       write('\n\nChoose typization:\n1. statical\n2. explicit\n3. polymorfism\n4. runtime type information\n5. dynamical\n6. implicit\n7. cast without data lose\n8. implicit cast without data lose\n9. argument output at method call\n'), read(T),
       write('\n\nChoose compiler type:\n1. open-source\n2. debug posibility\n3. bootstrapping\n4. multithreading compilation\n5. conditional compilation\n6. command line interpreter\n'), read(C),
       write('\n\nChoose memory management type:\n1. stack\n2. pointer\n3. manual memory management\n4. garbage collector\n'), read(M),

       language(L, P, T, C, M),
       write(L).

当我运行这个程序时,我总是接收所有的语言。但是在我的测试用例中,它应该只得到一种语言。语言是可以接受的,当来自语言的所有四个谓词返回相同语言L的真时,我的错误在哪里,我如何修复它?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-19 00:09:48

错误存在于输入捕获的某个位置(特别是,用户被要求输入一个与程序实际期望不符的字符串;请注意这里)。如果使用原子并删除单个引用,则有两个测试用例的程序会读到:

代码语言:javascript
复制
paradigm(ada, imperative).
paradigm(c, imperative).

typization(ada, statical).
typization(c, explicit).

compiler(ada, openSource).
compiler(c, debugPosibility).

memory(ada, stack).
memory(c, pointer).

language(L, P, T, C, M) :- paradigm(L, P), typization(L, T), compiler(L, C), memory(L, M).

test1(L) :- language(L, imperative, statical, openSource, stack).
test2(L,P) :- language(L, P, statical, openSource, stack).

运行test1(L)只生成L=ada,运行test2(L,P)只产生L=ada, P=imperative,这是必要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27557592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档