题 所以我最近想出了一些新的可能的项目,这些项目将不得不从用户提交和生成的文本中获取“含义”。 自然语言处理是处理这类问题的领域,经过一些初步的研究,我发现OpenNLP Hub和大学合作项目就像这个尝试项目 。 和stackoverflow有这个 。 如果有人能把我和一些很好的资源联系起来,从研究论文和介绍文本到apis,我会比一个6岁的小孩打开圣诞礼物更开心! 更新 通过你的一个build议,我发现了opencyc ( '世界上最大,最完整的通用知识库和常识推理引擎' )。 更令人吃惊的是,还有一个项目叫做UMBEL的开放循环的蒸馏版本。 它以rdf / owl / skos n3语法为特色的语义数据。 我也偶然发现了antlr ,一个parsing器生成器,用于“从语法描述中构build识别器,解释器,编译器和翻译器” 。 这里有个问题,列出了大量的免费和开放的数据 。 感谢stackoverflow社区!
List是二叉树的叶节点值的列表,我想弄清楚如何输出。 这是给我所有的节点,但我只需要叶子。 lea(nil,[]). lea(t(X,L,R),[X|L]) :- lea(L,L1), lea(R,L2), append(L1,L2,L). 运行这个给我: ?- lea(t(a,t(b,t(d,nil,nil),t(e,nil,nil)),t(c,nil,t(f,t(g,nil,nil),nil))), List). List = [a, b, d, e, c, f, g] 但是我需要 List = [d, e,g] 可能吗。
我只在Prolog工作了几天。 我了解一些事情,但这真让我困惑。 我想写一个函数,它需要一个列表并将其弄平。 ?- flatten([a,[b,c],[[d],[],[e]]],Xs). Xs = [a,b,c,d,e]. % expected result 该函数取出列表的内部结构。 这是我迄今为止: flatten2([],[]). flatten2([Atom|ListTail],[Atom|RetList]) :- atom(Atom), flatten2(ListTail,RetList). flatten2([List|ListTail],RetList) :- flatten2(List,RetList). 现在,当我打电话时, ?- flatten2([a,[b,c],[[d],[],[e]]], R). R = [a,b,c,d,e]. % works as expected! 但是当我打电话来查看我input的列表是否已经变平时,返回false而不是true : ?- flatten2([a,[b,c],[[d],[],[e]]], [a,b,c,d,e]). false. % BAD result! 它为什么一方面工作,而另一方面呢? 我觉得我错过了很简单的事情。
我是Prolog的新手,注意到“和”给出了不同的行为,但是为什么好奇呢,特别是当加载一个文件的时候, ?- ['test1.pl'].工作,而?- ["test1.pl"].不。