言語実装 Advent Calendar2022の1日目の記事として書いた。 Lisp Advent Calendar2022でも枠が空いていたのでダブル投稿。 プログラミング言語を実装してみたい!と思ったらまずは簡単なLispインタプリタから始めるというのは一つの王道だと思う。 複雑な構文解析は要らず最低限の再帰下降法パーサで手に入る構文木を、そのまま再帰的な関数で実行していくtree walking評価器。メモリ確保もヒープにそのまま置いていって、メモリ解放は実装言語のGCに任せるなりプログラムの終了時までやらなかったり。そんなインタプリタを作る経験から得られるものは非常に大きく、どんなプログラマでも一回は試してみてもいいのではないか?と思っている。(個人的な感想です) そんな簡易Lispを実装してみて沼にハマってしまい、より精緻な言語処理系を作りたいと思ったとする。その時点で:
Cで書くコードの方がCommon Lispで書くより速いって人がいたら、それは彼のCの技量が高すぎるってことだね。 “If you can't outperform C in CL, you're toogood at C.” — Eric Naggum 最近、Common Lispの非同期Webサーバ「Wookie」を高速化する過程で、ボトルネックになっていたHTTPリクエストのパース部分を高速に処理するライブラリを書きました。 fast-http - A fast HTTP request/response parser for Common Lisp 既存のライブラリ「http-parse」よりも約10倍速く、Cのライブラリ「http-parser」より5%ほど高速です。 追記 (2014/10/26): 最適化をやり直し、現在は「http-parse」よりも約27倍速く、Cの「h
最近Lispの連れション仲間を増やしたいので、いろんな初見の人に「Lispって知ってる?」と質問して回っています。 そこそこアンテナのある技術者ならLispというのがプログラミング言語の一派を意味しており、それが主に大量のカッコで構成されていることは知っているようなのですが、なんか拒否反応が多いんですよね。 拒否反応というのが、まあ、だいたい 「カッコが多すぎて気がおかしくなる」 「私の人生は大量のカッコに対応するには短すぎる」 「大学でやったけどカッコ死ね。」 みたいなHTML初心者がタグのネストに敗北したみたいな感想ですね…。 まあ、パッと見てそういいたくなる気持ちは分かるんですが、それ自体がよくあるLispに対する誤解と言わざるを得ないです。 事実、Lispプログラミングは大量のカッコを相手にするのですが、誰もカッコの個数なんて見ていません。 Lispのプログラムの構造を読むときは、
Lispは記号の構造的な表現であるS式を操作するインタープリタ方式を基調とするプログラミング言語である.ここでは,思考のツールとしてのCommon Lispを強調した解説を行う.すなわち,関数型プログラミング言語としてのCommon Lispの位置づけはいったん忘れ,人工知能の学習などに頻繁に現れる知的学習と問題解決,より一般的には記号処理を中心としたロジックを再現して,シミュレーションを中心とした理解や発想を支援する実践的なツールとしてCommon Lispを位置付けて,WindowsPCを使えるレベルの初学者を想定したAIProgramming入門コースを提供する(まだまだ工事中ですが…). — 西田豊明 目次 1.人工知能について 2. 処理系のインストール 3. gclによるAIプログラミング(超入門) 4. gclによるプログラミングプロジェクト(超入門) 5. gclによ
漫画が独特の味を出しているCommon Lispの本、Land of Lispを読みました。とても面白かったので紹介します。本の内容ゲームを作りながら、Common Lispや関数型プログラミングについて学べる本です。他の「ゲームで学ぶ・・・」系の本と違うのは、既存のゲームをCommon Lispで実装していくので、できあがったゲームがそれなりに面白い事です。ゲームのI/Fは基本CUIですが、一部の出力に関してはgraphvizやsvgを使ってグラフィカルに出力されていて面白くなっています。Common Lispの基本的な文法以外にも、Functionalprogramming、ゲーム用AI、Webサーバー、LazyProgrammingと扱っているトピックは広いです。 基本的なスタンスが「Lispサイコー」なので、そういうのが好きな人も十分楽しめると思います。ゲームの紹介 いく
Quicklispに登録されているCommon Lispライブラリの情報をWebで見られるサイト「Quickdocs.org」を作りました。 http://quickdocs.org/ さくらVPS 1Gで動いてます。この2日で突貫で作ったみたいな感じなのであまりいじめないでください。 機能 とてもシンプルなので、見ていただいたほうがわかりやすいかもしれません。 たとえばClackのプロジェクトページは以下です。 http://quickdocs.org/clack 右上にはWebサイトやリポジトリへのリンクを置きました*1。本文にはREADMEを表示しています。最近はGitHubにホストされているライブラリが多いので見慣れていると思いますけどね。 下のほうには.asdに記述されている情報を表示しています。Author, Maintainer と License、および依存ライブラリです
2013年02月20日08:30 カテゴリ書評/画評/品評Lightweight Languages (笑) -書評 - Land of Lisp 出版社より献本御礼。 Land of Lisp Conrad Barski / 川合史朗訳 [原著:Land of Lisp] これだ! Lispに足りなかったのは。本書「Land of Lisp」は、Lispの、Lispによる、Lispのための喜劇comedy。これでわかった。 Lispに足りなかったもの、それは、笑いだ。 およそ Computer Science というものを(独学であれ学校であれ)学んだプログラマーで、Lispに一目置かないものは存在しない。いたらそいつはモグリだと謹んで断言していただく。今日日主に使われている電脳言語は、多かれ少なかれLispの薫陶を受けている。JavaScript,Perl,Ruby, Pyth
► 2025 (20) ► 3月 (1) ► 2月 (8) ► 1月 (11) ► 2024 (183) ► 12月 (14) ► 11月 (14) ► 10月 (13) ► 9月 (13) ► 8月 (19) ► 7月 (13) ► 6月 (19) ► 5月 (15) ► 4月 (11) ► 3月 (21) ► 2月 (13) ► 1月 (18) ►2023 (159) ► 12月 (9) ► 11月 (10) ► 10月 (12) ► 9月 (7) ► 8月 (28) ► 7月 (8) ► 6月 (12) ► 5月 (10) ► 4月 (9) ► 3月 (25) ► 2月 (14) ► 1月 (15) ►2022 (166) ► 12月 (25) ► 11月 (19) ► 10月 (9) ► 9月 (11) ► 8月 (12) ► 7月 (10) ► 6月 (15) ► 5月 (1
LispでWebサービスを作ればYahoo!に60億で買ってもらえると聞いて 実はCと同じくらい速いコードが書けると聞いて ルンバがLispで書かれていると聞いて リリカルなので 面接で笑われてカッとなった マンガでわかるらしいのでiPhoneアプリが開発できると聞いて iアプリでLispが書けると聞いて 初めて手に入れたポケコンがAI-1000だったハッカーと画家を読んでしまった 普通のやつらの上を行きたいので 舌足らずなので セグウェイを制御するコードが一日で書けるようになると聞いて How to become a Hackerを読んだ 専用の求人情報に応募できると聞いて プログラミングClojureを読んだ 初めての人のためのLispを読んだ 自前のLispで書かれた将棋が強かったので LispとPostScriptがあればハッピーになれると聞いて LOLの熱にあてられた On
小黒さんによる「Lispマシンを作ってみた」を見ました。なかなか遠くのイベントに参加できないので、録画で後から見れるようになっていると助かります。関係者の皆さんありがとうございました。 動画を見てもらえれば分かりますが、FPGAの上でLispコンパイラで作られたマイクロコードを実行するCPUを動かしています。CPUだけでなく、ペリフェラルやコンパイラも自作です。発表もわかりやすく、動画でも楽しさが伝わって来ました。その場で発表を聞いていたら、もっとテンション上がったと思います。FPGAボードはスパルタン3Aのスタータキットです。スタータキットにSDカード、USBキーボードのI/Fが追加されています。DDRコントローラでは、私が昔書いたネタが役に立ったようで良かったです。速度に関しては、DDRのアクセスがボトルネックになっていそうですね。普通のDDRコントローラを作って、内蔵メモリでキャッ
1. 初めに 高階関数は関数を引数にとる関数です。リストの各要素に同じ処理をするマッピング、リストから 条件を満たした要素を取り出すフィルタリング、畳み込み、条件によって要素を並べ替えるソーティングがあります。 高階関数はプログラムのモジュール化を促進します。 個々のケースの再帰関数を書く代わりに、多くの場合に適応できる高階関数を書けば、 プログラムが短くなり、見通しが良くなります。 例えば、ソーティングに高階関数を使うとさまざまな条件で並び替えをすることができ、 並び替えの条件と、並び替えの手順を完全に分離することができます。 SRFI-95 に定義されている sort という関数は2つの引数をとり、最初の引数に並び替えるリスト、 2番目の引数に順序付けをする手続きを引数にとります。 例えば、整数のリストを単純に昇順に並び替えるときは次のようにします。 < が2つの数を比較する関数です。
apply: FUNCTION ARG &rest MORE-ARGS apply は何気に引数を複数に分けて受けられる。でも funcall とは違って、最初見たときは意味がわからん動作をする。 というのは、ARG と MORE-ARGS のうち一番最後の引数は list に突っ込んでおかねばならず、それ以外はそのままでいいというかそのままでないといけない。 #| ;;; 最初は受け取った引数をリストにまとめて返すこんな関数を ;;; 定義して使ってたのだけど、list がまさに同じ動作をする ;;; ことに気づいてしまった (defun args (&rest args) args) |# ;;; ふつーに関数 list を呼び出す (list 1 2 3) => (1 2 3) ;;; ふつーに関数 list を apply で呼び出す (apply #'list '(1 2 3))
Peter Norvig / 青木靖 訳 このページには2つの目的がある。コンピュータ言語の実装について一般的な記述をすることと、Lispの方言であるSchemeのサブセットをPythonで実装する具体的な方法を示すことである。私はこのインタプリタをLispy (lis.py)と呼ぶ。何年か前に私はJavaとCommon LispでSchemeインタプリタを書く方法を示した。今回の目標は、アラン・ケイが「ソフトウェアのマクスウェル方程式」と呼んだところの簡潔さと取っつきやすさを可能な限り実現するということだ。 SchemeのサブセットLispy の構文と意味論 コンピュータ言語の多くは様々な構文的な決まり(キーワード、中置演算子、カッコ、演算子優先順、ドット記法、セミコロンなど)を持っているが、Lisp族言語の1つとして、Schemeの構文はすべてカッコ付きの前置記法であるリストを基本とし
CFFI, the Common Foreign Function Interface, purports to be a portable foreign function interface for Common Lisp. The CFFI library is composed of a Lisp-implementation-specific backend in the CFFI-SYS package, and a portable frontend in the CFFI package. The CFFI-SYS backend package defines a low-level interface to the native FFI support in the Lisp implementation.It offers operators for allocat
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く