next up previous
Next: 9 例題:Xwindow操作機能の追加 Up: ソフトウェア特論 講義資料 C言語によるLisp処理系 Previous: 7.2 sweep


8 Xlispの組込み関数の追加法

組込み関数を追加する場合には, 組込み関数の本体を記述し,それを xlftab.cに登録して,全体を リンクします.


#include "xlisp.h"

extern LVAL cvflonum();

float  logistic (x)
float  x;
{
  double  exp ();
  
#ifdef MSDOS    
  if (x > 11.5129) return(.99999);
  else if (x < -11.5129) return(.00001);
#else
  if (x > 15.935773) return(.99999988);
  else if (x < -15.935773) return(.00000012);
#endif
  else
    return(1.0/
           (1.0+
            (float)exp((double)((-1.0)*x))));
}

float getflt(arg)
    LVAL arg;
{
  if (floatp(arg))
    return (float) getflonum(arg);
  else if (fixp(arg))
    return (float) getfixnum(arg);
  else xlbadtype(arg);
}

LVAL xlogistic()
{
  LVAL arg1;
  FLOTYPE v;
  arg1 = xlgetarg(); xllastarg();
  return(cvflonum((FLOTYPE)
                  logistic(getflt(arg1))));
}

LVAL xvdot()
{
  LVAL arg1,arg2;
  float sum;
  int i;
  arg1 = xlgavector();
  arg2 =xlgavector(); xllastarg();
  sum = 0.0;
  for (i = 0; i< getsize(arg1); i++)
    sum += getflt(getelement(arg1,i)) *
      getflt(getelement(arg2,i));
  return (cvflonum(sum));
}
Xlispでは,ユーザが関数を増やす場合に2つのヘッダファイルosdefs.h, osptrs.hに その増やした関数を登録します.この二つは,xlftab.cの中でincludeされています.

generated through LaTeX2HTML. M.Inaba 平成18年5月6日