谁有会prolog?了解的人好少,求解答小弟的一个问题,谢了

只手破天痕 2011-05-07 10:21:49
最近在做一个人工智能方面的题目,用prolog语言,用的是visual prolog,题目是求1-100有多少个素数,好像很少人知道这方面的,只有想到CSDN中你们这些牛人了
代码如下:我自己定义了一个fyl类,程序运行时说:main.pro(20,9) error c631: The predicate 'main::run/0', which is declared as 'procedure', is actually 'determ' ,我在main.cl中predicatesrun : core::runnable determ.已经加入了还是有误,fyl类中有关的声明和子句如下:

%fyl.cs

class fyl : fyl
open core

predicates
classInfo : core::classInfo.
primes:(integer,integer*) determ(i,o).
integers:(integer,integer,integer*) determ(i,i,o).
sift:(integer*,integer*) determ(i,o).
remove:(integer,integer*,integer*) determ(i,i,o).
% @short Class information predicate.
% @detail This predicate represents information predicate of this class.
% @end

end class fyl

%fyl.pro

implement fyl
open core

constants
className = "fyl/fyl".
classVersion = "".

clauses
classInfo(className, classVersion).
primes(Limit,Ps):-integers(2,Limit,Is),sift(Is,Ps).
integers(Low,High,[Low|Rest]):-Low < High,!,M=Low+1,integers(M,High,Rest).
integers(_,_,[]).
sift([],[]).
sift([I|Is],[I|Ps]):-remove(I,Is,New),sift(New,Ps).
remove(P,[],[]).
remove(P,[I|Is],[I|Nis]):-not(0=I mod P),!,remove(P,Is,Nis).
remove(P,[I|Is],Nis):-0=I mod P,!,remove(P,Is,Nis).
end implement fyl

implement main
open core

constants
className = "main".
classVersion = "".

clauses
classInfo(className, classVersion).

clauses
run():-
console::init(),
fyl::primes(100,List),
stdIO::write("The SuShu list (bubblesort) is: ",List),
stdIO::nl.
end implement main

goal
mainExe::run(main::run).

我的main.pro为:

implement main
open core

constants
className = "main".
classVersion = "".

clauses
classInfo(className, classVersion).

clauses
run():-
console::init(),
fyl::primes(100,List),
stdIO::write("The SuShu list (bubblesort) is: ",List),
stdIO::nl.
end implement main

goal
mainExe::run(main::run).


另外还有到题目是求解两个升序表如何合并成一个升序表,最好给出代码,会有追加分给的呵










...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DSVCNET 2011-06-03
  • 打赏
  • 举报
回复
过了这么久不知道LZ还关注个帖否。
看了一下integers,sift,remove这三个谓词的子句部分应该可以是procedure型的。
这样的话primes(Limit,Ps):-integers(2,Limit,Is),sift(Is,Ps).也就是procedure型的,就可以直接在run中调用了。

如果非要声明determ型的话run部分就要改成。
clauses
run():-
console::init(),
fyl::primes(100,List),
stdIO::write("The SuShu list (bubblesort) is: ",List),
stdIO::nl.
run():-
stdIO::write("Fail"),
stdIO::nl.
yinjunwei7 2011-05-10
  • 打赏
  • 举报
回复
向老崔请教啊~~~
只手破天痕 2011-05-08
  • 打赏
  • 举报
回复
就真的没有牛人了解吗,不是吧,,,,,,,,,,,,,

3,424

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧