在SBCL用户手册中,有几个对术语" 开放代码 "的引用.Common Lisp黑客在提到优化代码时也会使用这个术语.
你能解释一下"开放代码"的含义并举例说明它是如何工作的吗?
我将图形坐标存储在循环列表中:
(defun make-circular-list (size &key initial-element)
(let ((list (make-list size :initial-element initial-element)))
(nconc list list)))
(defvar *coordinates* (make-circular-list 1024 :initial-element 0.0))
Run Code Online (Sandbox Code Playgroud)
现在,*coordinates*只要必须设置新坐标,就可以轻松更新.
但是,我有一个库函数,它采用一系列坐标在图形上绘制线条.当然这个函数不能用于循环结构,所以我想制作一个固定长度的副本.列表或数组很好.
到目前为止,我曾尝试subseq和make-array与:initial-contents关键字,但它失败. loop或者dotimes做工作,但我希望避免迭代列表中的每个元素.
是否有可能有效地复制这个圆形结构或者在移位阵列的精神下制作一个固定长度的阵列?
根据CLHS,FUNCALL参数是一个函数指示符,它可以是表示在全局环境中定义的函数的符号.我正在寻找一种在本地执行此操作的方法,如下例所示:
(defun test ()
(let ((name 'local-function))
(flet ((local-function ()
'hello))
(funcall name))))
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种从本地环境获取函数定义的方法.Common Lisp有可能吗?