在C中,为了确保我们不重新包含包含的标头,我们使用以下结构:
#ifndef UTILS
#define UTILS
#include "my_utils.h"
#endif
Run Code Online (Sandbox Code Playgroud)
我把我的Lisp程序分成了单独的文件; 多个文件有时使用相同的文件(例如,my_utilities由多个文件使用).当我运行程序时,我收到警告,我正在重新定义事物(load
多次调用同一文件).
这可以通过执行类似于#ifndef
C的操作来解决.Common Lisp等效或标准方法是什么?
我是Lisp的新手.让我知道我是否缺少最佳实践(也许是构建我的程序的不同方法?).
我经常有一个由另一个类列表组成的类.例如,我将有一个由向量组成的向量列表类.为了避免编写长语句,我编写了一个访问嵌入式类的方法.但是,这种方法只起吸气剂的作用; 我不能用它来设置插槽值.有没有办法使用方法来设置类槽值?
以下是一个最小的例子:
(defclass vector ()
((name :accessor vector-name
:initarg :name)))
(defclass vector-list ()
((vectors :accessor vector-list-vectors
:initarg :vectors)))
(defun make-vector-list ()
(make-instance 'vector-list
:vectors (list
(make-instance 'vector :name 'v1)
(make-instance 'vector :name 'v2))))
(defmethod access-vector-name ((vt vector-list) vector-idx)
(vector-name (nth vector-idx (vector-list-vectors vt))))
;; returns V1
(print (access-vector-name (make-vector-list) 0))
;; Now, trying to set the same slot returns an error
;; How can I set the slot?
(setf (access-vector-name (make-vector-list) 0) 'new); --> error
Run Code Online (Sandbox Code Playgroud) 我想知道如何存储单个变量并在该变量上具有特定的功能.我想知道是否有创建课程的替代方案.
具体来说,我正在创建一个应用程序,其中我存储一个时间值,表示从基准时间(例如,2000年1月1日,00:00:00)开始经过的秒数.我想对此值执行操作,例如将其从秒转换为特定时间或日期,或从日期转换为特定秒.
我用一个班级做了这个,但看起来很浪费.具体来说,我每次访问存储的值秒的时间过去,将类似于(time-time time)
其中time-time
对于时间点的访问time
.
有没有更好的方法来设计它,也许没有类?