所以,我正在尝试在Elisp中创建一个通用的Web搜索功能:
(defun look-up-base (url-formatter)
(let (search url)
(setq search(thing-at-point 'symbol))
(setq url (url-formatter search))
(browse-url url))
)
此功能只会抓取光标下的单词,使用url-formatter格式化网页搜索,然后在网络浏览器中打开搜索字符串以执行搜索。
接下来,我尝试使用前一个函数作为基础来实现一个将光标下的Google作为一个函数。
(defun google ()
(interactive)
(look-up-base (lambda (search) (concat "http://www.google.com/search?q=" search))))
如果我尝试评估它,Emacs不会抱怨,但当我尝试使用它时,Emacs会给我这个错误消息:
setq: Symbol's function definition is void: url-formatter
我不知道为什么会这样。我看不出这个功能有什么问题,我做错了什么?
答案 0 :(得分:9)
我认为你需要使用funcall:
而不是(url-formatter search)
您应该(funcall url-formatter search)
。
Lisp期望函数的名称作为列表的第一个元素。如果您有一个与lambda表达式或函数名称关联的符号,则需要使用funcall
。