在 lisp 家族(编辑:lisp-1)语言中是否有一种方法可以根据其作为函数或参数的位置来区分符号求值(即在求值时重写该符号的求值) ?
作为一个例子(我不需要这个功能,这是一个例子),我想在一组对象上实现某种中缀操作,它可以被一个对象本身调用
(my-obj some-operator arg1 ...)
实际上会将函数 some-operator 应用于 my-obj 和参数。
但是当此对象在代码中的其他任何地方用作参数时,例如:
(some-function my-obj &args...)
它将评估为 my-obj 的值。
谢谢。
最佳答案
在 Racket 中,可以本着这种精神做几件事:
你可以定义一个
struct
并给它一个prop:procedure
.当在应用程序中提供struct
的实例时,将调用该过程。您可以覆盖默认值
#%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/