Lisperの人ならみんな知ってる竹内関数(たらいまわし関数)という関数があります。 定義としてはこんな感じ。 そのシンプルな定義からは想像もつかないほど複雑で膨大な再帰呼び出しがおこなわれるとても興味深い関数です。たとえば引数にTarai(10,5,0)を与えると343,073回も再帰呼び出しされたりします。 この関数呼び出しの引数がどのように変化するか知りたくてプログラムを書いて調べてみたところ、Tarai(10,5,0)の場合は3つの引数がそれぞれ0〜10(xは-1〜10)の間で少しずつ変化するなかで、2つの値を固定してひとつの値が下降していくような挙動があったりして、なんだか音楽の3和音のコード進行を思わせるような動き方です。 そういうことなら、ということで実際に音にして聴いてみました。Tarai関数が呼ばれるたびに引数のx、y、zを、0=ミ、1=ファ、2=ソ、……、のように音に割
バイトで書いているコードでパターンマッチが必要になりちょっと探してみたのですが、自分が使いやすいものが無かったので適当に作りました。Literal Match の略で LitMatch です。 http://github.com/hayamiz/LitMatch やりたいことはそんなに複雑ではなくて、木構造データが特定の形をしているかどうかを調べつつ、マッチした木構造の特定のサブツリーを抜き出したいというもの。ML系言語でよく見られるあれですね。絶対どこかに似たようなものがあるはず、、、と思いつつ探すより作ったほうが早かったので作りました。こうして車輪で世界は埋め尽くされるのだなあ。 使い方としては、LitMatchという名前のとおり極力リテラルをそのまんま書けることを目指しています。たとえば (litmatch '(1 (2 "hello" world 3)) ((1 (2 "hello
発端 twitterでつぶやいてみました。 Lispの人って、シンボルシンボルと連呼してエッチですね …じゃなかった、こっちこっち(↓)。 Kanzenの辞書はS式によるTRIEで持っていた記憶があるけど、どんな構造だったっけかな KanzenはLispマシンのTAO/ELIS上で動く漢字入力システムで、SKKの原型です(実装はまったく別)。とりあえず、うろ覚えで、Emacs Lispを使ってデータ構造を再現してみます(うろおぼえ選手権的な意味で)。 こんな構造にしてみます。 ("k" (("a" (("o" . "顔") ("n" (("j" "i" . "漢字") ("z" "e" "n" . "完全"))))) ("u" "r" "u" "m" "a" . "車"))) 1文字ごとのTRIE構造 文字列はcdr方向に伸びる 各セルのcdrは: 候補が1つなら、その文字 候補が複数なら
*[hatefu:labs.yaneu.com/20090905/] コンピュータ将棋プログラムをLISPで書く 「コンピュータ将棋プログラムをLISPで書く」と言うとコンピュータ将棋開発関係者にすら完全にネタかと思われているのが実状ではあるが、私はこれを機にその誤解を解いておきたい。 ここでは、私がC#で書いたLISPエンジンのソースを公開し、これが実際にコンピュータ将棋プログラムの開発において非常に有効であることを示す。 * YaneLisp version 1.10 今回の記事はあまりに長文なので最後まで読む前に眠くなる人のために、まず始めに私が実装したLISPのバイナリとソースを配布しておく。ライセンスはNYSLとする。 勢いに任せて実装したので、かなり雑な作りだが、必要ならばC#側で関数を追加するなりすればいいと思う。このLISPの製作に要した時間は丸2日ぐらい。 # YaneL
GrahamのANSI Common Lispでは嫌われていて碌に説明のないloopマクロ。一方、Practical Common Lispでは対照的に好んで用いられていて、全編に渡って頻繁に使われている。しかしloopマクロは難しいという意識があるのかその説明は第22章とかなり後回しにされており、ちぐはぐな感を受ける。ここでは、LOOP for Black-Belts という題のつけられたその章で解説されているloopマクロの用法を整理してみた。 ANSI Common Lispでの黒魔術扱いに敬遠していたloopマクロだったが、こうして整理してみるとそれほど難しく考えずとも便利に使うことができそうだ。 目次 繰り返し 計数繰り返し コレクション内繰り返し 変数更新しながら繰り返し ループ終了条件の追加 アクション 集約 ループ内ローカル変数 任意の式の実行 条件分岐 ループ中断 その他
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
Lispコミュニティ「Shibuya.lisp」のテクニカルセミナーイベント「Shibuya.lispテクニカルトーク#3」が開催されました。今回はGaucheの川合史朗(Shiro)さんも登壇するなど、やはりすごく面白い話をいろいろ聞けました。 以下、観覧メモ。間違いがあったらご指摘ください。 今回は、メイントークでCommon Lispの2件も継続を活用していたのが印象的でした。継続は力なり。あと、Lispとは関係ありませんが、なぜかプレゼンターのうち2人もタイル型ウィンドウマネージャを使っている方がいました。 開会の挨拶(佐野匡俊) 前回からのアップデートが紹介されました。なんといっても、Shiroさんが開発した、Lingrを継ぐチャット「Chaton」が大きいトピックでした。一方、逆引きCL/Scheme/Clojureは停滞ぎみで、知りたい側の人の声が欲しいとか。 次回のテクニカ
Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう(編集部) 「Gaucheでメタプログラミング」と題して、これからGaucheを使ったプログラミングの連載を書かせていただきます吉田裕美です。よろしくお願いいたします。 Gaucheとは 今回の連載で取り上げるGaucheはハワイ在住の日本人ハッカー、川合史朗さんが作った、Lispの一種であるSchemeのオープンソース処理系です。 Gaucheの特徴は、PerlやRubyのように気軽に使える軽い処理系だということです。Perl同様に正規表現や文字列操作が行え、ちょっとしたツールの作成にも使えます。しかし、非常に強力なCommon Lisp風オブジェクトシステムを持ち、Lispならではのマクロに加え、Webやグラフィックスなどの豊富なライブラリも持っているので実用
ニコニコ動画ダウンローダー を Common Lisp で。 手頃な url-decode が見つからなかったので、hunchentoot を使ってしまいました。何かいいのがないのかしら。 (eval-when (:load-toplevel :compile-toplevel :execute) (require :drakma) (use-package :drakma) (require :hunchentoot) ; for url-decode (require :series)) (defun get-video (video-id) (let ((parameters (with-open-file (in (merge-pathnames #p".nicovideo.lisp" (user-homedir-pathname))) (read in))) (cookie-ja
素敵な断片 Common Lisp の素敵な断片です。 数値のコンマ編集 (format nil "~:D" 1000000) ;; ==> "1,000,000" 標準出力を束縛する (with-output-to-string (*standard-output*) (write-string "Hello ") (format t "~{~a~^, ~}" '(1 2 3))) ;; ==> "Hello 1, 2, 3" アナフォリックマクロ Anaphora より抜粋。マクロを定義するマクロ。it を予約語であるかのように使う。 (defmacro anaphoric (op test &body body) `(let ((it ,test)) (,op it ,@body))) (defmacro aif (test then &optional else) `(anapho
なるほどなー 一通りの機能を揃えたブログシステムを自前で書いてみたんだけど、やっぱブログとか既存のもの使う方が楽だしはてなブログ使ってみる。 Windows環境でCUIのGitを使うならGit for WindowsとPuTTYを組み合わせて使うのがいいかんじです。なんかあんまし日本語情報が無い気がするので適当に書いておきます。 両方をインストールして、まずは環境変数GIT_SSHにplink.exeへのパスを登録しておく。*1 公開鍵暗号方式で通信するには puttyに接続先のホスト情報を登録する pageantに鍵を登録する どっちか。 puttyに接続先のホスト情報を登録する putty.exeから接続先を設定しておく。例えば接続先github.com、ログイン名git、あと秘密鍵をgithubというセッション名で保存しておくと以下のように接続先を指定できる。 $ git clone
S式は人に優しいか Shiro: Lispの不人気の理由として筆頭に上げられるのが、括弧だらけの 独特の見た目。とっつきにくい、一般的な表記法と違っていてわかりにくい、 等々、様々なことが言われてきました。しかし、 S式を捨てたLispも開発されましたが 流行ったとはいい難く、Lispな人々はいまだに括弧に固執しているかのようです。 S式のメリットをLisperに尋ねれば、エディタがどうの、マクロがどうの、といった 回答が真っ先に返って来ると思うんですが、そういう理屈をいくら理解しても S式がダメな人がS式を好きになったりはしません。どうも、もっと根本的な 感覚に大きな隔たりがあるような気がします。非Lisperから理解しがたい、 Lisperの持つ感覚とはどんなものなんでしょうか。Lisp脳から見た世界は どんなものなのでしょうか。 構文木を人間が書く? S式は言ってみれば言語の構文木そ
Lispについてのよくある誤解と、その中にあるちょっとした真実 はてなの質問: プログラミング言語で最強(スケーラブル)なのは、 Lispだと思われます。 http://jp.franz.com/index.html しかし、 世間ではマイナー言語のようです。 なぜでしょうか。 についた回答のいくつかには、「Lispを少しだけかじった人がしがちな誤解」が 含まれてるようなので、それをネタに少し解説してみます。 ただ、誤解が生じるのは、やっぱりそれなりの理由があって、従ってその 誤解の中にも(条件つきの)真実が含まれていることがあります。 そのへんまでをも含めて考えてみましょう。以降、引用は回答からです。 Lispはスクリプト言語? 一昔前まで、これらのスクリプト系の言語は「とてつもなく遅い」のが嫌われる最大の要因でしたが、最近のコンピューターの性能向上でようやくRuby,Python,Li
ここを見て Lisp 処理系を作ってみた。 けど、途中で不満に思う点が何点かあった。 どうせ手を加えるなら、一から作ろうと思った。 それなら、その作成の経緯を記録しておこう。
沖ソフトウェア株式会社は、沖通信システム株式会社および株式会社沖インフォテックと平成22年10月1日をもって合併いたしました。新会社名は、株式会社OKIソフトウェアとなります。3社が行っております事業は新会社にて従来通り継続いたします。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く