相关疑难解决方法(0)

关于onlisp中的广义变量

我不知道这里发生了什么,文中的宏观例子.基本上,不熟悉如何使用get-setf-method,内置宏(可能是函数?).具体来说,get-setf-method的某些返回值为零的情况怎么样?例如(get-setf-method'x)

NIL ;
NIL ;
(#:NEW-3069) ;
(SETQ X #:NEW-3069) ;
X
Run Code Online (Sandbox Code Playgroud)

为什么这个示例代码首先将第五个返回值设置为第二个返回值,以进行初始化?最后它如何处理在表达式中设置变量的顺序,例如(aref ar(incf i)

(get-setf-method '(aref ar (incf i)))

(#:G3070 #:G3071) ;
(AR (INCF I)) ;
(#:G3072) ;
(SYSTEM::STORE #:G3070 #:G3071 #:G3072) ;
(AREF #:G3070 #:G3071)
Run Code Online (Sandbox Code Playgroud)

这是宏的定义:

(defmacro sortf (op &rest places)
  (let* ((meths (mapcar #'(lambda (p)
                             (multiple-value-list
                              (get-setf-method p)))
                        places))
         (temps (apply #'append (mapcar #'third meths))))
    `(let* ,(mapcar #'list
                     (mapcan #'(lambda (m)
                                  (append (first m)
                                          (third m)))
                             meths)
                     (mapcan #'(lambda (m)
                                  (append (second …
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp

3
推荐指数
1
解决办法
147
查看次数

如何在lisp中全局更改函数内的变量值

我想知道是否有任何方法可以使用LISP中的指针模拟C行为.在C中如果更改变量的值,该指针指向,则它具有全局效果(即该值也将在函数外部更改).

所以,如果我有

(defun mutate ( a ) 
   (some-magic-function a 5)
)
Run Code Online (Sandbox Code Playgroud)

无论以前是什么,a都会在调用mutate后转为5.

我知道带有列表的元素有可能(很多是副作用) 在common-lisp中,如何在不更改原始列表的情况下从函数中修改list参数的一部分? 但我想知道如何为整个清单做这件事.

lisp common-lisp argument-passing

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

DEFSETF 的用途

从标准描述中很难理解,所以:

例如,我试图将某个列表 (ls) 的第 k 个位置设置为特定值。甚至有我自己的功能,可以访问第 k 个 elt。

(defun kth-elt (lst k)
 (cond ((> 0 k) nil)
  ((equal 0 k) (car lst))
  ((< 0 k) (kth-elt (cdr lst) (- k 1))))).
Run Code Online (Sandbox Code Playgroud)

还创建了一个函数来更新该值。

 (defun kth-upd (lst k new)
  (cond ((> 0 k) nil)
    ((equal 0 k) (setf  (car lst) new))
    ((< 0 k) (kth-upd (cdr lst) (- k 1) new))))
Run Code Online (Sandbox Code Playgroud)

现在我实际上可以使用它,但我想了解它和 DEFSETF 之间的区别。另外我还是不明白。如何“教”defsetf 使用这些。谢谢帮助。

lisp common-lisp

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

标签 统计

common-lisp ×3

lisp ×3

argument-passing ×1