gpt4 book ai didi

constants - 如何在 Common Lisp 中定义函数局部常量?

转载 作者:行者123 更新时间:2023-12-02 18:06:42 26 4
gpt4 key购买 nike

我有这样一个函数:

(defun lookup-data (index-key)
(let* ((key-table '("key0" "key1" "key2" ...))
(index (position index-key key-table :test #'string-equal))
...
; do stuff with index, among other things
)

键表(实际上只是一个字符串列表,但它被用作将字符串映射到索引号的查找表)是读取时已知的文字值。我在想也许应该将它设为 defparameterdefconstant,但它不会在这个函数之外的任何地方使用。我假设它是一个字面值这一事实意味着大多数编译器可以按原样对其进行基于常量的优化,但是我还应该做些什么来将它标记为常量吗?这里有哪些选项?

最佳答案

您的代码没问题。key-table 是一个常量,它会在函数编译时创建一次。

附言。您也可以使用 #.创建需要代码的更复杂的常量:

(defun ... (...)
(let ((unit #.(let ((u (make-array '(10000 10000) :element-type 'double-float
:initial-element 0)))
(dolist (i 10000 unit)
(setf (aref u i i) 1))))
...)
...))

这里的单位矩阵 unit 是在读取时创建的并且是一个常量(好吧,您可以修改它,但是......)。

关于constants - 如何在 Common Lisp 中定义函数局部常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73094554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com