我该如何声明一个符号总是代表一个特定的值,并且在整个程序执行过程中不能改变?如何在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. PLT Redex:参数化语言定义
- 9. 定义一个方案程序
- 10. 定义一个方案功能检查
- 11. 如何在PLT方案中绘制点,线和画布中的坐标?
- 12. 如何在C++中定义一个常量数组?
- 13. 如何在PLT方案中打印结构以显示其字段?
- 14. 在方案中定义一个字段的结构体
- 15. 如何定义配色方案选项?
- 16. 如何调用一个方法定义的另一个定义
- 17. 定义一个常数函数调用
- 18. 你如何在C中定义一个常量?
- 19. 如何在C++中定义一个常量?
- 20. 如何检查一个常量是否在晶体中定义
- 21. 方案:采用一个4位数的整数,在方案
- 22. 如何在自定义ConstraintValidator中获取一些常用数据
- 23. 如何使用let绑定方式在SML中定义常量?
- 24. 如何方便地定义一个命名的整数常量列表?
- 25. 如何访问定义为一个常数
- 26. 如何在企业架构师中定义一个常量成员函数?
- 27. 如何在Python中定义一个类
- 28. 如何在方案编程中定义数字来表示等效的单词
- 29. android自定义url方案..?
- 30. 方案定义功能
在Common Lisp中,通常* stars *用于顶层变量,+ plus-signs +用于常量。 – Svante 2009-06-24 01:46:44
我不在Lisp中编程,我一直想知道*约定。感谢您清除它。 – unj2 2009-06-24 03:29:01