scheme - Scheme 中的解构记录

标签 scheme lisp

我正在学习 Scheme,具有 C/C++ 背景。我非常习惯于将相关的值组合到结构中,而且我发现 Scheme 的记录在这方面工作得很好。

如果发现自己经常这样做以避免函数体中的视觉噪音:

(define (f pt z)
  (let*
    ((x (point-x pt))
     (y (point-y pt))
     (d (* x y z)))
   ...)

其中 pt 是一个 point 记录。有没有更短的方法来绑定(bind)/解构记录的字段?理想情况下,这将在 let 绑定(bind)中工作,但我想不出一种方法来编写可以完成此操作的宏,或者如果这可能的话。

最佳答案

在Racket中,我们可以使用match破坏记录的字段。这是否是一种更好的方法是值得商榷的...

(define (f pt z)
  (match pt
    [(point x y)
     (let ([d (* x y z)])
       ...)]))

关于scheme - Scheme 中的解构记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682857/

相关文章:

lisp - 代码错误 Lambda 表达式

scheme - 方案: pattern matching syntax

emacs - 重新编译不会更正函数调用中的拼写错误

data-structures - Scheme (Lisp) 中树的深度逆向

scheme - 从用户输入评估表达式的问题

variables - Lisp 中的未绑定(bind)变量

Lisp方法流程

list - 方案匹配元素

function - 如何定义可变参数函数

scheme - 如何将符号 a 与字符 a 进行比较?