にラムダ式を渡すためにどのように、私はelispの中に、一般的なWeb検索機能を作成しようとしている:だから、elispの
(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を使用して検索し、Webブラウザで検索文字列を開いて検索を実行します。
次に、以前の関数を基にして、カーソルの下の単語を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
をそして私はこれがなぜ起こるか見当もつかない。私は機能に間違って何かを見ることができません、何が間違っているのですか?
これは少なくともelispと共通のlispでは当てはまりますが、それでも関数や変数のスコープ/名前のスペーシングのアーチファクトは依然として残っています。関数と変数の名前空間が別々のスキームやクロージャーやその他のリスプでは、ラムダ式を評価リストの最初の要素として使用し、関数呼び出しとして動作させることができます。 –