Next: 2.3.1 シンボルの評価
Up: 2 Lispインタプリタの構造
Previous: 2.2 read
解釈・評価部は以下のようになっています.
Lispの関数EVALの本体もxlevalとなっています.
evalhoookといってLispの大域変数*evalhook*に代入されているものを
処理する機構が入っています.
LVAL xleval(expr)
LVAL expr;
{
/* check for control codes */
if (--xlsample <= 0) {
xlsample = SAMPLE;
oscheck();
}
/* check for *evalhook* */
if (getvalue(s_evalhook))
return (evalhook(expr));
/* check for nil */
if (null(expr))
return (NIL);
/* dispatch on the node type */
switch (ntype(expr)) {
case CONS:
return (evform(expr));
case SYMBOL:
return (xlgetvalue(expr));
default:
return (expr);
}
}
generated through LaTeX2HTML. M.Inaba 平成18年5月6日