我试图理解Lisp-1和Lisp-2之间的区别以及它与Clojure的关系,但我仍然不理解.任何人都可以开导我吗?
我正在对一堆函数进行一些繁琐的调用,但参数将在运行时确定.我写了一个简单的函数来保持我的代码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后端中选择自己的命令(并且通常能够将可执行的表单名称存储在变量中)但这不起作用:
(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)
我尝试了各种各样的形式,但仍然没有运气,而且我很难找到它,我得到了关于函数和变量的结果,但没有关于如何将前者放入后者...?
我有以下代码
(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中使其工作?
我可爱的功能:
(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)
那么如何从内部函数中捕获变量呢?
我有以下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 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'选项感到很困惑.任何身体都可以提供一些提示吗?