以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 人工智能 :: 机器学习|数据挖掘|进化计算 』  (http://bbs.xml.org.cn/list.asp?boardid=62)
----  [求助]一个简单的Prolog程序——求交集  (http://bbs.xml.org.cn/dispbbs.asp?boardid=62&rootid=&id=46388)


--  作者:zwldy001
--  发布时间:5/4/2007 4:52:00 PM

--  [求助]一个简单的Prolog程序——求交集
%求两个集合的并集
class set1
domains
    list = integer*.
    name=integer.
predicates
    member:(name,list)nondeterm.  %判断元素name是否在集合list中
    intersection:(list,list)nondeterm.           %求两个集合的并集
      
end class
implement set1
clauses
   member(Name,[Name|_]):-
           stdio::write(Name),
           stdio::nl,
           !.
   member(Name,[_|T]):-
           member(Name,T).   
   intersection([],[_|_]):-
           !.
   intersection([Name|_],Namelist):-
           member(Name,Namelist).
   intersection([_|T],Namelist):-
           intersection(T,Namelist).   
end implement
goal
   console::init(),
   stdio::write("集合[45,21,4,6,8,5,2,5,9]与[8,5,1,9,21,4,7,5,45]的交集为:\n"),
   set1::intersection([45,21,4,6,8,5,2,5,9],[8,5,1,9,21,4,7,5,45]).
请大家帮我 看看上面的程序。想问问大家关于错误
The predicate '::goal/0', which is declared as 'procedure', is actually 'nondeterm'
应该如何解决。对于谓词模式如(
Erroneous - Always exit
failure  - Always fail
procedure - Always success
determ  - succeed or fails
multi  - 1 or more solutions (never fail)
nondeterm - 0 or more solutions)应该怎么使用。小弟在这里拜谢了。

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms