回答
您可以使用let
方案聲明局部變量。例如,在列表中創建與給定值綁定:
(let ((x 3) (y 4) (z 2))
(+ y z)) ; body
=> 6
現在,您可以評估涉及的<body>
部分聲明的變量的表達式。你甚至可以從綁定列表創建let
,例如使用宏:
(define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))
(define-syntax my-let
(syntax-rules()
[(_ lst exp)
(eval `(let ,lst ,exp) ns)]))
(my-let '((x 3) (y 4) (z 2)) ; bindings as an association list
'(+ y z)) ; expression to be evaluated
=> 6
上面創建一個名爲my-let
接收到這些綁定進行評估綁定的列表和一個表達式的宏,並返回評估結果。
這是清晨,我的咖啡杯丟失了,我想不出一種避免使用'eval'的方法,所以我們建議大家歡迎:) –
只是爲了它,你可以有這樣的語法規則:'' [(_(quote lst)exp)....]'其中'quote'是一個字面意思,但當然這有點作弊;) (儘管如果列表是第一個分配給一個變量並賦予'my-let') – Metaxal
@Metaxal我修改了一下我的代碼,以便'lst'和'exp'現在可以作爲變量傳遞,只要'exp'是一個帶引號的表達式 –
一個簡單的,直接的和便攜的方式是定義一個訪問器(在這個例子中,GETVAL)使用assq
:
(define vars '((x 3) (y 4) (z 2)))
(define (getval sym) (cadr (assq sym vars)))
或其任何變化。然後使用方法如下:
(+ 3 (getval 'x))
=> 6
(+ (getval 'y) (getval 'z))
=> 6
- 1. 如何將GUID值分配給變量?
- 2. 將值分配給變量從Android的排球
- 3. 如何將變量傳遞給「文本」球拍
- 4. 如何將Qt的行編輯中的值分配給變量
- 5. 如何在UNIX中將參數的值分配給變量?
- 6. 如何將HTML按鈕值分配給JavaScript中的變量?
- 7. 如何將ArrayBuffer分配給scala中的變量值
- 8. 如何將回調返回值分配給Mongoose中的變量?
- 9. 如何將數值分配給產品中的變量?
- 10. 如何將int分配給String變量?
- 11. Slick2D如何將PNG分配給變量
- 12. 如何將表名分配給變量?
- 13. 如何將super分配給變量?
- 14. 如何將MojoX :: Redis分配給變量?
- 15. 如何將JavaScript函數中的變量的值分配給Mason變量?
- 16. 將輸入值分配給雙變量
- 17. 將CSV值分配給變量
- 18. XSLT:將值分配給全局變量
- 19. 將值分配給變量列表
- 20. MySQL:將列值分配給變量
- 21. 將訂閱值分配給變量:Angular2
- 22. 將JSON對象值分配給變量
- 23. SCSS:將兩個值分配給變量
- 24. 將javascript值分配給PHP變量
- 25. NetCDF4將值分配給變量問題
- 26. MySQL將返回值分配給變量
- 27. Bash將尾值分配給變量
- 28. 將複選框值分配給變量
- 29. 將錯誤值分配給變量
- 30. SAS將哪個值分配給變量?
你問題的第一部分,建議你真的要加引號的符號列表,但第二部分建議你不知道很多關於S-EXPS,因此,你可能會後,更簡單的答案。如果後者是真的,你想要的是奧斯卡關於「讓」的答案的第一部分,而不要看第二部分。 – Metaxal