タグ

ブックマーク / fkmn.exblog.jp (2)

  • On Lisp 第2章 関数 | フッ君の日常

    まだ小手調べ。Common Lisp の紹介といったところ。 といいつつ、Common Lisp と Scheme は、異なる部分が結構多いので、少し戸惑い中。 2.1 データとしての関数 - 関数は Lisp のオブジェクト 2.2 関数の定義 - #' オペレータ => 指定した名前の関数オブジェクトを取得 - 変数と関数の名前空間が別 2.4 属性としての関数 (defun behave (animal) (funcall (get animal 'behavior))) (setf (get 'dog 'behavior) #'(lambda () (wag-tail) (bark))) (behave 'dog) ;;=> wag-tail と bark を実行 - OOP のメソッドの概念に対応 2.5 スコープ - Common Lisp はレキシカルスコープ 2.7 ローカ

    On Lisp 第2章 関数 | フッ君の日常
    kiyo_hiko
    kiyo_hiko 2012/07/24
    「末尾再帰を最適化するかどうかは、実装依存 CLISP はそのままでは最適化しない」
  • Perl の reduce (List::Util) で配列を作る方法 | フッ君の日常

    SICP の2.2.3節あたりを読んでいたら、思いついたのでメモ。 いままで reduce で配列を作る方法がいまいち分かってなかったんだけど、以下のようにすればいい。 例えば、1から3までの数字について、元の数字とその数字を2乗した数の対の配列を作る場合はこう。 my @array = 1 .. 3; my $array_ref = reduce { [ @{$a}, [ $b, $b**2 ] ] }[], @array; print YAML::Dump($array_ref); 実行結果 --- - - 1 - 1 - - 2 - 4 - - 3 - 9 初期値に空の配列リファレンスを入れておいてやるのが(個人的な)ポイント。 Perl の(というより List::Util の)reduce は初期値を設定できなくて使いづらいと思ってたんだけど、ただ単に、配列の先頭に初期値を突っ込

    Perl の reduce (List::Util) で配列を作る方法 | フッ君の日常
    kiyo_hiko
    kiyo_hiko 2011/10/29
    これ、やろうとして失敗してた。{[@{$a},$f->($b)]}なるほど。Perlのリスト連結とかはまだ若干苦手だ。pushとかすれば一発なのであんまり考えたことなかった。関係ないが配列の長さ思い付いたのでおまけ length=reduce{$a+1} 0,@xs
  • 1