小编aud*_*row的帖子

Common Lisp中的#ifndef

在C中,为了确保我们不重新包含包含的标头,我们使用以下结构:

#ifndef UTILS
#define UTILS

#include "my_utils.h"

#endif
Run Code Online (Sandbox Code Playgroud)

我把我的Lisp程序分成了单独的文件; 多个文件有时使用相同的文件(例如,my_utilities由多个文件使用).当我运行程序时,我收到警告,我正在重新定义事物(load多次调用同一文件).

这可以通过执行类似于#ifndefC的操作来解决.Common Lisp等效或标准方法是什么?

我是Lisp的新手.让我知道我是否缺少最佳实践(也许是构建我的程序的不同方法?).

lisp clisp common-lisp include

3
推荐指数
2
解决办法
123
查看次数

Common Lisp中的类的getter和setter

我经常有一个由另一个类列表组成的类.例如,我将有一个由向量​​组成的向量列表类.为了避免编写长语句,我编写了一个访问嵌入式类的方法.但是,这种方法只起吸气剂的作用; 我不能用它来设置插槽值.有没有办法使用方法来设置类槽值?

以下是一个最小的例子:

(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)

lisp oop setter common-lisp clos

2
推荐指数
1
解决办法
300
查看次数

Common Lisp替代使用Classes

我想知道如何存储单个变量并在该变量上具有特定的功能.我想知道是否有创建课程的替代方案.

具体来说,我正在创建一个应用程序,其中我存储一个时间值,表示从基准时间(例如,2000年1月1日,00:00:00)开始经过的秒数.我想对此值执行操作,例如将其从秒转换为特定时间或日期,或从日期转换为特定秒.

我用一个班级做了这个,但看起来很浪费.具体来说,我每次访问存储的值秒的时间过去,将类似于(time-time time)其中time-time对于时间点的访问time.

有没有更好的方法来设计它,也许没有类?

lisp oop class common-lisp clos

0
推荐指数
1
解决办法
288
查看次数

标签 统计

common-lisp ×3

lisp ×3

clos ×2

oop ×2

class ×1

clisp ×1

include ×1

setter ×1