谁有会prolog?了解的人好少,求解答小弟的一个问题,谢了
最近在做一个人工智能方面的题目,用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).
另外还有到题目是求解两个升序表如何合并成一个升序表,最好给出代码,会有追加分给的呵
[解决办法]
过了这么久不知道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.