相关疑难解决方法(0)

Lisp-1和Lisp-2有什么区别?

我试图理解Lisp-1和Lisp-2之间的区别以及它与Clojure的关系,但我仍然不理解.任何人都可以开导我吗?

lisp clojure lisp-2

89
推荐指数
2
解决办法
2万
查看次数

如何在Emacs Lisp中创建临时函数

我正在对一堆函数进行一些繁琐的调用,但参数将在运行时确定.我写了一个简单的函数来保持我的代码DRY,但是给它一个名字是不必要的.我不在其他任何地方使用此功能.

我试图按照我在Scheme中的方式进行,但是我得到一个void-function错误:

(let ((do-work (lambda (x y z)
                  (do-x x)
                  (do-y y)
                  ;; etc
                  )))
  (cond (test-1 (do-work 'a 'b 'c))
        (test-2 (do-work 'i 'j 'k))))
Run Code Online (Sandbox Code Playgroud)

我可以将它全部加入apply(例如(apply (lambda ...) (cond ...))),但这不是很可读.有没有更好的办法?

emacs elisp

25
推荐指数
2
解决办法
2967
查看次数

在elisp中,如何将函数放入变量中?

我想允许用户在"自定义"emacs后端中选择自己的命令(并且通常能够将可执行的表单名称存储在变量中)但这不起作用:

    (defun dumb-f ()
    (message "I'm a function"))

    (defvar my-function "dumb-f")

    (my-function)
    ==> Debugger entered--Lisp error: (invalid-function "dumb-f")

    (setq my-function 'dumb-f)

    (my-function)
    ==> Debugger entered--Lisp error: (invalid-function "dumb-f")
Run Code Online (Sandbox Code Playgroud)

我尝试了各种各样的形式,但仍然没有运气,而且我很难找到它,我得到了关于函数和变量的结果,但没有关于如何将前者放入后者...?

emacs elisp

16
推荐指数
2
解决办法
3731
查看次数

elisp用作参数和返回值

我有以下代码

(defun avg-damp(f) 
    #'(lambda(x) (/ (+ (funcall f x) x) 2.0)))
Run Code Online (Sandbox Code Playgroud)

一个电话

(funcall (avg-damp #'(lambda(v) (* v v))) 10)
Run Code Online (Sandbox Code Playgroud)

在SBCL中返回55.0(正确的值)但在emacs lisp中与以下堆栈崩溃

Debugger entered--Lisp error: (void-variable f)
  (funcall f x)
  (+ (funcall f x) x)
  (/ (+ (funcall f x) x) 2.0)
  (lambda (x) (/ (+ ... x) 2.0))(10)
  funcall((lambda (x) (/ (+ ... x) 2.0)) 10)
  eval((funcall (avg-damp (function ...)) 10))
  eval-last-sexp-1(nil)
  eval-last-sexp(nil)
  call-interactively(eval-last-sexp)
Run Code Online (Sandbox Code Playgroud)

如何在Emacs lisp中使其工作?

lisp elisp

10
推荐指数
2
解决办法
2608
查看次数

elisp:从内部函数捕获变量

我可爱的功能:

(defun f (x)
  (lambda (y) (+ x y)))
Run Code Online (Sandbox Code Playgroud)

然后,我期待这个:

(funcall (f 2) 2)
Run Code Online (Sandbox Code Playgroud)

返回4.但是,我得到了这个:

Debugger entered--Lisp error: (void-variable x)
Run Code Online (Sandbox Code Playgroud)

那么如何从内部函数中捕获变量呢?

elisp

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

Elisp 中 lambda 的递归

我有以下Python代码:

def sum_fibonacci():
    '''Project Euler: 2
    Sum of even-valued terms of Fibonacci sequence < 4 mil
    '''
    def i(a, b, acc):
        if a >= 4000000: return acc
        if a % 2 == 0:
            return i(a + b, a, acc + a)
        else: return i(a + b, a, acc)
    return i(2, 1, 0)
Run Code Online (Sandbox Code Playgroud)

我想把它翻译成 Emacs Lisp。在Elisp 的高阶函数中,我被告知不要使用defuninside defun,因为它全局启用该函数,所以我改为编写 lambda 。但我需要让 lambda 递归地调用自身。

我的代码是:

(defun sum-fibonacci ()
  (let ((i
         (lambda (a b acc)
           (cond ((>= a 4000000) …
Run Code Online (Sandbox Code Playgroud)

emacs recursion lambda elisp

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

Elisp交互式函数名称

我正在尝试使用交互式功能名称功能.在emacs lisp手册上,它说:

'a'函数名称(即满足fboundp的符号).现有,完成,提示.

所以我尝试了一个小测试代码:

(defun testfun1 ()
  (message "hello, world!"))

(defun test (abcd)
  (interactive "aTheme name: ")
  (abcd))
Run Code Online (Sandbox Code Playgroud)

Emacs提出错误说,

test:Symbol的函数定义为void:abcd

我尝试用fboundp测试abcd,它返回t.所以我对如何在交互式中使用'a'选项感到很困惑.任何身体都可以提供一些提示吗?

emacs elisp

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

标签 统计

elisp ×6

emacs ×4

lisp ×2

clojure ×1

lambda ×1

lisp-2 ×1

recursion ×1