小编Spy*_*oft的帖子

写宏的宏 - 编译错误

当我编译下面的代码时,SBCL抱怨g!-unit-value和g!-unit是未定义的.我不知道如何调试这个.据我所知,flatten失败了.

当展平到达defunits的未引用部分时,似乎整个部分被视为原子.这听起来不对吗?

以下使用Let over Lambda一书中的代码:

保罗格雷厄姆公用事业

(defun symb (&rest args)
  (values (intern (apply #'mkstr args))))

(defun mkstr (&rest args)
  (with-output-to-string (s)
    (dolist (a args) (princ a s))))

(defun group (source n)
  (if (zerop n) (error "zero length"))
  (labels ((rec (source acc)
             (let ((rest (nthcdr n source)))
               (if (consp rest)
                   (rec rest (cons (subseq source 0 n) acc))
                   (nreverse (cons source acc))))))
    (if source (rec source nil) nil)))

(defun flatten (x)
  (labels ((rec (x acc)
             (cond ((null x) acc) …
Run Code Online (Sandbox Code Playgroud)

macros common-lisp backquote let-over-lambda

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

如何分析 Emacs 按键命令的频率?

我想在使用 Emacs 时运行分析器来识别我最常使用哪些键命令,以便将它们重新映射到(更)容易的键组合。有人可以推荐一个吗?我怀疑我是第一个需要这个的人。否则,欢迎任何想法。

emacs

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

如何从Common Lisp调用Go程序

我有一个Go程序,出于效率原因无法在Common Lisp中重写.如何通过Common Lisp运行它?

目前的选项:

1. CFFI

在我看来,使用外部函数接口就像是"正确"的方法.然而,我所做的研究直接导致死路一条.如果这是胜利者,有什么资源可以学习如何与Go交互?

2.插座

在侦听端口的同时让Go程序一直运行会起作用.如果这是最好的方式,我会继续尝试使它工作.

3.执行系统命令

这似乎是各种错误的.

4.未知

还是有一种我还没想过的很棒的方式?

common-lisp

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

Hunchentoot重定向列表

我的网站的URI结构最近发生了巨大变化,我需要将所有旧页面重定向到它们对应的新页面。我对所有旧的和新的URI都有点对点的列表。目前,我正在尝试为每个循环定义简单的处理程序:

(let ((redirects '(("/old/uri/example-1" . "/new/uri/example-1"))))
  (dolist (redirect redirects)
    (hunchentoot:define-easy-handler (???? :uri (first redirect)) ()
       (redirect (rest redirect)))
    ))
Run Code Online (Sandbox Code Playgroud)

也许有更好的方法。假设define-easy-handler是正确的,则每个easy处理器都需要一个函数符号。我尝试以下无济于事:

  1. 将(gensym)放在需要功能符号的位置
  2. 使用列表而不是虚线列表,并在需要符号的地方调用(第一次重定向)
  3. 在整个内容周围放置一个准引用,在整个位置放置一个取消引用(第一次重定向)

什么是完成此任务的好方法?

common-lisp hunchentoot

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