• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:用java写lisp-解释器-6-if-用宏实现

java 搞代码 3年前 (2022-02-19) 31次浏览 已收录 0个评论

首先看一下之前自定义函数if的成果

(
    (define if (lambda (p then_v else_v) 
        ((or (and p car) cdr) (cons then_v else_v))))
    (if (quote (> 1 2)) (3) (cons 2 4))
)

看起来还能够,然而因为波及入参绑定值的时候会对传入的s表达式进行求值,如果波及递归的时候就会出问题,因而咱们须要减少一个quote, 但这样也导致了新的问题 如果咱们想提早对传入s表达式求值,就须要每一个表达式都进行润饰,无疑减少了许多心智累赘,那如何将累赘降到最低呢?
咱们的冀望咱们的表达式变成这样:

(if (> 1 2) 3 (cons 2 4))

也就是说 咱们只须要一个mapQuote 函数对传入的参数表达式进行 包裹一层 q来源gaodaima#com搞(代@码网uote即可。
这个函数长这样

(define mapQuote (lambda (exp) (map (lambda (o) (cons quote o)) exp))

而后

(
    (define args (list (> 1 2) 3 (cons 2 4)))
    (apply if (mapQuote args))
)

在包装一层


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:用java写lisp-解释器-6-if-用宏实现
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址