1 Star 0 Fork 0

zhouxs1023/eigenmath_pratt

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
define.cpp 1.45 KB
一键复制 编辑 原始数据 按行查看 历史
Calin Barbat 提交于 2018-02-24 10:52 . Initial commit.
// Store a function definition
//
// Example:
//
// f(x,y)=x^y
//
// For this definition, p1 points to the following structure.
//
// p1
// |
// ___v__ ______ ______
// |CONS |->|CONS |--------------------->|CONS |
// |______| |______| |______|
// | | |
// ___v__ ___v__ ______ ______ ___v__ ______ ______
// |SETQ | |CONS |->|CONS |->|CONS | |CONS |->|CONS |->|CONS |
// |______| |______| |______| |______| |______| |______| |______|
// | | | | | |
// ___v__ ___v__ ___v__ ___v__ ___v__ ___v__
// |SYM f | |SYM x | |SYM y | |POWER | |SYM x | |SYM y |
// |______| |______| |______| |______| |______| |______|
//
// We have
//
// caadr(p1) points to f
// cdadr(p1) points to the list (x y)
// caddr(p1) points to (power x y)
#include "stdafx.h"
#include "defs.h"
#define F p3 // F points to the function name
#define A p4 // A points to the argument list
#define B p5 // B points to the function body
void
define_user_function(void)
{
F = caadr(p1);
A = cdadr(p1);
B = caddr(p1);
if (!issymbol(F))
stop("function name?");
// evaluate function body (maybe)
if (car(B) == symbol(EVAL)) {
push(cadr(B));
eval();
B = pop();
}
set_binding_and_arglist(F, B, A);
// return value is nil
push_symbol(NIL);
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/zhouxs1023/eigenmath_pratt.git
git@gitee.com:zhouxs1023/eigenmath_pratt.git
zhouxs1023
eigenmath_pratt
eigenmath_pratt
master

搜索帮助