scheme - 为什么球拍宏的 lambda 没有返回任何内容?
问题描述
我正在尝试为关于 DSL 的课程(特别是漂亮的球拍,培训版)在球拍中制作基本的日记条目语言。我有一个正确的解析器和阅读器,但我的宏有困难。下面是我的扩展代码。我试图让我的 DSL 具有功能性而不是命令性(我知道我可以更新一个全局分类帐值,但这不符合这个项目的精神)。
我已经在这个模块中包含了重要功能的代码。其中很多都基于本教程:https ://beautifulracket.com/bf/a-functional-expander.html
现在,当我在此文本上运行我的代码时:
[1920-02-19<equipment-20000><cash-10000,stock-10000>]
[2020-12-20<insurance-500><cash-500>]
我从显示调用中得到这个输出:
(#<date 1920-02-19> debits credits)()(#<date 2020-12-20> debits credits)#<void>#<void>
看起来我的 lambda 没有在我的日记条目宏中返回更新的分类帐。我对球拍的了解并不多,所以我不确定我在这里做错了什么。有小费吗?
(define (fold-funcs apl ac-funcs)
(for/fold ([current-apl apl])
([ac-func (in-list ac-funcs)])
(ac-func current-apl)
(display current-apl)))
(define-macro (ac-line ENTRIES ...)
#'(begin
(define ledger empty)
(set! ledger (fold-funcs ledger (list ENTRIES ...)))
(display ledger)))
(provide ac-line)
(define-macro (journal-entry "[" INFO ... "]")
#'(lambda (ledger)
(define entry (list INFO ...))
(define dt (first entry))
(set! entry (rest entry))
(define d (first entry))
(set! entry (rest entry))
(define c (first entry))
(define e (list dt d c))
(display e)
(set! ledger (cons e ledger))
ledger
))
(provide journal-entry)
解决方案
推荐阅读
- ubuntu - 如何将 30 秒 ubuntu 截屏视频的默认文件类型从 webm 更改为 gif?
- powershell - 如果用户存在于两个对象中,则从对象 1 [Powershell] 返回其值
- python - Selenium Web 抓取没有 id 或类名的嵌套 div
- haskell - 惰性评估是如何以不需要比所产生的收益更多的开销的方式实现的?
- python - pandas - 访问数据框中前一行的值
- javascript - 使用 replace() 但我不需要原始字符串
- reactjs - “gatsby-node.js”在运行 onCreateNode 生命周期时抛出错误:fmImagesToRelative is not a function
- json - 如何使用 Swift 代码 4 使用 JSON 解码器构建模型和解析
- django - django-modeltranslation:如何禁用显示没有翻译的语言的对象(例如帖子)?
- angular - 带有查询参数的角度路由不起作用