タグ

lambda-calculusとemacsに関するnabinnoのブックマーク (5)

  • elispのlambdaにもcalleeを - 技術日記@kiwanami

    いろいろ準備中です。小ネタで。 JavaScript には arguments.callee という、「今いる関数」が入っている便利なプロパティがあります。 arguments.callee - JavaScript | MDN これが非常に便利で、最近elispでも欲しくなってきたのでこう書いてみました。 (defmacro jslambda (args &rest body) (let ((argsyms (loop for i in args collect (gensym)))) `(lambda (,@argsyms) (lexical-let (callee) (setq callee (lambda( ,@args ) ,@body)) (funcall callee ,@argsyms))))) 名前がアレですが、とりあえず普通に lambda の代わりとして書けます。 (

    elispのlambdaにもcalleeを - 技術日記@kiwanami
  • Emacs Lisp のダメなところ - あどけない話

    Emacs Lisp をこよなく愛する僕の目から、Emacs Lisp がダメだと思うところをまとめておきます。 文化的な問題 Emacs Lisper の多くは、Lisp が好きで使っているのではなく、Emacs が好きだからしかたなく使っているのでしょう。当は C で書きたいのに、無理して Lisp を利用している感じです。 そのため、Emacs に付いてくる Emacs Lisp のコードは、Lisp らしくないものがほとんどです。単に C での発想を Lisp で表現しています。 これらのコードは、読みこなせないぐらい関数が大きく、副作用のある部分とない部分が分離されていません。また高階関数を用いて、データ構造を走査するコードと実際に仕事をするコードを分離するという意識も低いようです。 GoogleMapReduceという論文のお陰で、Lisp の写像関数(map)と畳込み

    Emacs Lisp のダメなところ - あどけない話
  • function の役割り - Emacs Lisp あれこれ

    関数をクオートするのには quote (') より function (#') の方がよいとされている。 しかし、どういう利点があるのかあまり理解されていない。 C 言語のソースを見ると、quote と function はまったく同じ実装になっている。 つまり、実行時の役割は完全に一緒である。 以下の例では、auto-fill-function をいうシンボルをクオートしている。 このようにシンボルをクオートする場合は、 「以下のシンボルは関数ですよ」という「コメント」としての役割はあっても、 クオートという意味においてはまったく違いはない。 (setq auto-fill-function (function my-auto-fill-function)) では何が嬉しいのか? それは、byte compile のときに、 quote でクオートするときよりも適切に byte comp

  • GNU Emacs Lispリファレンスマニュアル: 関数

    URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=elisp21&node=What%20Is%20a%20Function" "texi/elisp21/関数とはなにか"へのコメント(無し) 一般的には、関数とは、引数(arguments)と呼ばれる値を与えられ、 計算を行うための規則です。 この計算結果を関数の値と呼びます。 計算では副作用、つまり、変数の値やデータ構造の内容に継続する変更 を伴うこともできます。 Emacs Lispの関数や関数のようなオブジェクトに関する重要な用語をあげておきます。 関数 Emacs Lispでは、Lispプログラムにおいて引数に適用可能ものは なんであれ関数(function)である。 Lispで書いた関数を意味する場合もある。 スペシャルフォームやマクロは関数ではない。 基関数 基関数(primi

  • 1