next up previous
Next: 2.3.1 シンボルの評価 Up: 2 Lispインタプリタの構造 Previous: 2.2 read

2.3 eval

解釈・評価部は以下のようになっています. 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日