Common Lisp具有一個名爲progv的函數,該函數爲給定符號和值列表的表單建立動態綁定。我爲Clojure做了類似的事情。我很確定這在覈心語言中不存在。我想知道我的最佳選擇是什麼。Common Lisp的Clojure中的PROGV
1
A
回答
3
這裏是用綁定的例子:
user> (def ^:dynamic add +)
#'user/add
user> (binding [add -]
(add 42 41))
1
,因爲有效率的成本動態綁定,最新版本的Clojure的要求你添加元數據 給需要進行動態綁定的每個符號。
結合僅僅是圍繞着功能push-thread-bindings
和pop-thread-bindings
的包裝,所以如果你想建立這樣的結合動態的,你可以自己調用這些函數,像這樣:
user> (defn with-alternate-addition [number1 number2 addition-function]
(push-thread-bindings {#'add addition-function})
(try
(add number1 number2)
(finally (pop-thread-bindings))))
#'user/with-alternate-addition
user> (with-alternate-addition 42 41 -)
1
只是確保你得到的push和pop正確或事情得到確實很難調試。
相關問題
- 1. Clojure中的Common Lisp的符號名?
- 2. 模擬Clojure的風格的Common Lisp中
- 3. Clojure:相當於Common Lisp的「do」
- 4. Lisp的源代碼美化(Common Lisp,Scheme,Clojure)
- 5. 將Common Lisp代碼移植到Clojure
- 6. 將宏從Common Lisp翻譯爲Clojure
- 7. Clojure:相當於Common Lisp READ功能?
- 8. 的#ifndef Common Lisp中
- 9. Common Lisp中
- 10. 與Common Lisp中
- 11. Common Lisp a Lisp-n?
- 12. Scheme/Common Lisp/Clojure中的自動差異庫
- 13. 使用的Common Lisp
- 14. Common Lisp中的繪圖樹
- 15. Common Lisp中的Stackoverflow Mergesort
- 16. 關於Common Lisp中
- 17. 規則Common Lisp中
- 18. 如果Common Lisp中
- 19. 如何Common Lisp中
- 20. 替換Common Lisp中
- 21. 泥設置兩個Common Lisp的Clojure的和發展
- 22. Common Lisp流?
- 23. Step Eval Common Lisp
- 24. 「unfold」for common lisp?
- 25. Predicates Common Lisp
- 26. Common Lisp SublimeREPL
- 27. Common Lisp Binary Tree
- 28. Scheme或Common Lisp?
- 29. common lisp和emacs
- 30. Common Lisp Loop Trouble
[binding](http://clojuredocs.org/clojure.core/binding)不做你想要的嗎? – bsvingen
這個? https://github.com/richhickey/clojure-contrib/blob/7ea70da82e42416864e2f97e3d314aced34af682/src/clojure/contrib/pprint/pprint_base.clj#L104 – leeor
richhickey/clojure ...回購已過時,請查看clojure github組織 –