我該如何聲明一個符號總是代表一個特定的值,並且在整個程序執行過程中不能改變?如何在PLT方案中定義一個常數?
4
A
回答
8
據我所知,這在Scheme中是不可能的。而且,對於所有意圖和目的,這不是絕對必要的。只需像常規變量那樣在頂層定義值,然後不會更改它。爲了幫助你記住,你可以通過一個約定來命名這些常數 - 我已經看到書籍的頂層變量是用*stars*
圍繞它們的名字來定義的。
在其他語言中,有些庫會覆蓋您創建的定義。然而,Scheme的詞彙範圍界定與PLT的模塊系統相結合確保了這一點永遠不會發生。
2
您可以定義計算結果爲常量的宏,這將保護您免受簡單的用途set!
(define-syntax constant
(syntax-rules()
((_) 25)))
然後你只需要使用(constant)
無處不在,這是不超過打字*不變*
5
在PLT方案中,您可以將自己的定義寫入自己的模塊中 - 如果您自己的代碼不使用`set!',那麼綁定永遠不會改變。事實上,編譯器使用它來執行各種優化,所以這不僅僅是一個約定。
,我認爲的
1
一個真正的hackish的解決辦法是定義一個讀者宏,返回你的常數:
#lang racket
(current-readtable
(make-readtable (current-readtable)
#\k 'dispatch-macro (lambda (a b c d e f) 5)))
#k ;; <-- is read as 5
那麼這將是不可能的重新定義這個(不改變你的讀者宏):
(set! #k 6) ;; <-- error, 5 is not an identifier
相關問題
- 1. PLT方案內存
- 2. PLT方案排序功能
- 3. 用plt方案導入struct
- 4. PLT方案:在「鑄造SPELs在LISP」
- 5. 如何在方案中定義最後一個?
- 6. 如何定義一個常數函數
- 7. 如何檢索球拍/ PLT方案中的按鈕標籤?
- 8. 如何定義一個常數法
- 9. 定義在方案
- 10. PLT Redex:參數化語言定義
- 11. 定義一個方案程序
- 12. 定義一個方案功能檢查
- 13. 如何在PLT方案中繪製點,線和畫布中的座標?
- 14. 如何在C++中定義一個常量數組?
- 15. 如何在c/C++中定義一個常量數組?
- 16. 如何在MIT方案中獲得我的函數定義?
- 17. 如何在PLT方案中打印結構以顯示其字段?
- 18. 如何在android studio中定義一個常規輸入常量?
- 19. 如何爲自定義URL方案創建一個鉤子?
- 20. 在方案中定義一個字段的結構體
- 21. 如何在R中定義常數
- 22. 如何定義一個常量?
- 23. 如何啓動自定義URL方案
- 24. 如何調用一個方法定義的另一個定義
- 25. (方案)可以定義一個函數,但不能調用它
- 26. 如何在定義函數中添加一個定義
- 27. 在Java中定義一個常量
- 28. 定義一個常數函數調用
- 29. 你如何在C中定義一個常量?
- 30. 如何在Scala中定義一個常量成員?
在Common Lisp中,通常* stars *用於頂層變量,+ plus-signs +用於常量。 – Svante 2009-06-24 01:46:44
我不在Lisp中編程,我一直想知道*約定。感謝您清除它。 – unj2 2009-06-24 03:29:01