MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003.
For current customers, we continue to provide
professional support for IF/Prolog until Dec 31, 2008.
このプログラム例は、$PROROOT/demos/cの中にあります。新しい述語for_pred/3は、C言語,Pascal,Fortranなどの従来のプログラミング言語で使う”for”文と同様の働きをします。この述語は3つの引数を持ちます。第1引数は、初期整数値、第3引数は最大整数値、第2引数は数列の現在値を与える変数です。その増分は内部で1にセットされ、外部からは変更できません。
(注意:この述語は、すでに組み込み述語for/3として提供されています)
/* ---------------------------------------------------------------------- */
/* filename : $PROROOT/demos/c/for_pred.c */
/* for_pred(Min_int, N, Max_int): produces the series of */
/* integers [Min_int,Max_int]. test with (in ./for_test): */
/* go :- M=3,N=6, for(M,I,N),write('I='),write(I),nl,fail. */
/* ---------------------------------------------------------------------- */
#include "cpred.h"
typedef struct {int i; int max;} FORSTATE;
Cboot() { CPRED("for_pred", 3, Forpred, sizeof(FORSTATE)); }
/* ---------------------------------------------------------------------- */
COROUTINE(Forpred, FORSTATE, state)
RESUME(1, res1);
BEGIN
if( !XChk(IsInt(Arg(1)) && IsInt(Arg(3)),
"integer_expected")) {
FAIL;
}
state->i = IntPC(Arg(1));
state->max = IntPC(Arg(3));
while(state->i <= state->max)
{
if (UnifyArg(2, IntCP((INT)state->i))) {
DETACH(1,res1);
}
state->i++;
}
END
for_predのプログラム例は、以下のようになります。
?- for_pred(3,I,5),write('Number='),write(I),nl,fail.
Number=3
Number=4
Number=5
no
?-
|