clojure - Lisp 家族 : Different evaluation of a symbol call and symbol as argument

标签 clojure scheme lisp racket s-expression

在 lisp 家族(编辑:lisp-1)语言中是否有一种方法可以根据其作为函数或参数的位置来区分符号求值(即在求值时重写该符号的求值) ?
作为一个例子(我不需要这个功能,这是一个例子),我想在一组对象上实现某种中缀操作,它可以被一个对象本身调用

(my-obj some-operator arg1 ...)  

实际上会将函数 some-operator 应用于 my-obj 和参数。
但是当此对象在代码中的其他任何地方用作参数时,例如:

(some-function my-obj &args...) 

它将评估为 my-obj 的值。
谢谢。

最佳答案

在 Racket 中,可以本着这种精神做几件事:

  1. 你可以定义一个struct并给它一个prop:procedure .当在应用程序中提供 struct 的实例时,将调用该过程。

  2. 您可以覆盖默认值 #%app使用您自己的功能,重新定义应用程序,并包括不是 struct 的内容。例如,你可以模仿 Clojure 的 (key map) 语法,这样 ('symbol dict) 实际上就是 (hash-ref dict 'symbol).

关于clojure - Lisp 家族 : Different evaluation of a symbol call and symbol as argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34285428/

相关文章:

ruby-on-rails - clojure与Ruby

scheme - 仅提取列表中的数字

scheme - 如何修复此 Scheme 协程代码以在 Racket 中运行

Lisp括号问题

clojure - 有没有办法在 leinegen 中设置系统属性?

list - 在 Clojure 中访问列表中的 map

constructor - 使用 Clojure reify 提供构造函数

variables - 如何修改 Common Lisp 中的函数绑定(bind)?

syntax-error - 常见的 lisp 错误 : "should be lambda expression"

lisp - 帮助理解 lisp 中的这一行