当前位置: 首页 > 后端技术 > Java

java写lisp解释器(7defstruct用宏实现源码)

时间:2023-04-01 17:16:20 Java

defstruct(定义宏defstruct(lambda(x.ff)((let((i-1)(j-1)(struct-name(symbol->stringx))(keys(map(lambda(x)(if(pair?x)(carx)(x)))ff)))(`((define,(string->symbol(string-append'mark-'struct-name))(lambda(,@keys)((cons(vector'struct',struct-name)(vector,@keys)))))(define,(string->symbol(string-append'verify-struct-'struct-name))(lambda(o)((if(not(and(eqv?'struct'(vector-ref(caro)0))(eqv?,struct-name(vector-ref(caro)1))))(error,(string-追加'not-struct'结构名称)))))),@(map(lambda(n)((set!i(+i1))(`(define,(string->symbol(string-appendstruct-name'.'(symbol->stringn)))(lambda(o)((,(string->symbol(string-append'verify-struct-'struct-name))o)(vector-ref(cdro),i)))))))keys),@(map(lambda(n)((set!j(+j1))(`(define,(string->symbol(string-appendstruct-name'.'(symbol->stringn)'-set!'))(lambda(ov)((,(string->symbol(string-append'verify-struct-'struct-name))o)(vector-set!(cdro),jv)))))))keys)))))))using((defstructbox(namewidthheightsize))(definex(mark-box'name'235))(显示(box.widthx))(newline)(box.width-set!x15)(display(box.widthx)))=>2=>15目前不支持这种形式的初始化操作:(defstructbox(名称宽度高度(尺寸5)))