相关疑难解决方法(0)

在Common Lisp中定义setf-expanders

事情就是这样:我没有"获得"setf-expanders,并希望了解它们是如何工作的.

我需要了解它们是如何工作的,因为我遇到了一个问题,这似乎是为什么你应该学习setf-expanders的典型例子,问题如下:

(defparameter some-array (make-array 10))

(defun arr-index (index-string)
  (aref some-array (parse-integer index-string))

(setf (arr-index "2") 7) ;; Error: undefined function (setf arr-index)
Run Code Online (Sandbox Code Playgroud)

如何为ARR-INDEX编写合适的setf-expander?

common-lisp setf

13
推荐指数
2
解决办法
1935
查看次数

在Lisp中,什么是推动是为了利弊?

(push x list)
Run Code Online (Sandbox Code Playgroud)

扩展到

(setq list (cons x list))
Run Code Online (Sandbox Code Playgroud)

什么扩展到以下:

(setq list (append list2 list))
Run Code Online (Sandbox Code Playgroud)

?这有一个标准的宏吗?

lisp macros common-lisp

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

写一个破坏性的宏或函数像incf?

我需要一个incf在增量期间执行某些边界检查的函数:

val := val + delta
if val >= 1.0
   then return 1.0
   else return val
Run Code Online (Sandbox Code Playgroud)

我可以这样写incf:

(defun incf-bounded(val delta)
  (incf val delta)
  (if (>= val 1.0) 1.0 val))    
Run Code Online (Sandbox Code Playgroud)

在这种情况下我需要使用它(setf x (incf-bounded x delta)).但是我该怎么写一个我可以使用的(incf-bounded x delta),比如,哪里x会被修改?

lisp macros common-lisp

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

标签 统计

common-lisp ×3

lisp ×2

macros ×2

setf ×1