タグ

lispに関するmanabouのブックマーク (53)

  • AIと一緒に新しい言語処理系を作ってみた|shi3z

    Claude-3 Sonnetがだいぶ良いので、前々から考えていた、「Lispっぽい記法で書けるけど他の言語に慣れた人にも使える言語」の処理系を作ってみた。仮にEasyLispという名前にした。 この言語ではこんな感じでプログラムが書ける (define person (object)) (set! person.name "Alice") (set! person.age 30) (print person.name)personというオブジェクトのプロパティをnameやageがあって、これをドット記法で指定するとpersonオブジェクトのプロパティにアクセスできる。 同じことをCommon-Lispでやろうとするとこうなる (defun example () (let ((person (make-object :name "Alice" :age 30))) (format t "N

    AIと一緒に新しい言語処理系を作ってみた|shi3z
  • Survival Common Lisp - 現代Lisperたちの生存プログラミング術 - clfreaks - BOOTH

    技術書典6で頒布した書籍「Survival Common Lisp」の電子版です。 会場でDLカードを買われた方はダウンロード後にパスワードを入力してください。 紙の書籍をお求めの方下記のイベントにて若干数頒布予定です。 4/25 Shibuya.lisp lispmeetup #75 会場: 東京都港区芝 https://lisp.connpass.com/event/127054/ 4/27 第10回関西Lispユーザ会 会場: 京都府京都市中京区 https://kansai-lisp-useres.connpass.com/event/120424/

    Survival Common Lisp - 現代Lisperたちの生存プログラミング術 - clfreaks - BOOTH
  • LISPMEMO

    Emacs から SLIME を起動すると (http://lispuser.net/emacs/lisphacking.html , http://lispuser.net/commonlisp/clisp.html 参照) 、 CL-USER> というプロンプトが表示されていると思います。 CL-USER> ここに、プログラムを入力することで、 Lisp にプログラムを解釈させて結果を確認することができます。 さっそく Lisp にプログラムを実行させてみましょう。 CL-USER> (+ 1 2) 3 これは、 1 + 2 を計算させるプログラムです。 (+ 1 2) の意味は、関数 + パラメータとして 1 と 2 を渡す、という意味になります。 乗算を行いたい場合には関数 * を使用してみてください。 CL-USER> (* 3 4) 12 もちろん、式を入れ個にする事もできます

  • 純LISP - Wikipedia

    純LISP(じゅんりすぷ、英: pure LISP)とは、コンピュータ・プログラミング言語 LISP のうち、ごく基的な要素だけからなる方言の一種。1960年のジョン・マッカーシーの論文「Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I」で示された[1]。基的な関数とプリミティブのみしかないが、その言語のインタプリタをその言語で記述できるという性質を持っている。なお、論文とほぼ同時期に発表された、最初の LISP の実装である LISP I は約90個の組み込み関数があり、純LISPではない。 純LISPには2種のデータ型「アトム」と「ペア」、及び、関数はそれらを操作する5つの基的な関数が存在する。 「ペア」はデータのペアを表現する。要素 A と B からなるペアは

  • GitHub - rui314/minilisp: A readable lisp in less than 1k lines of C

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - rui314/minilisp: A readable lisp in less than 1k lines of C
  • GitHub - carld/micro-lisp: 🎄A very small Lisp programming language 😀that used to be under 200 lines of C🎄

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - carld/micro-lisp: 🎄A very small Lisp programming language 😀that used to be under 200 lines of C🎄
    manabou
    manabou 2018/03/30
  • optima - 高速パターンマッチライブラリ - Qiita

    開発が成熟してきたので、ここらで拙作のパターンマッチライブラリ、optimaを日語で解説したいと思う。ただし解説とは言っても、詳細な仕様をだらだらと解説するようなことはしない。むしろ「なぜパターンマッチなのか」を踏まえた上で、簡単な入門と使用例を示すことで、パターンマッチの重要性を認識してもらうのが狙いだ。なお、詳細な仕様についてはマニュアルを参照されたい。 なぜパターンマッチなのか Common Lispにはパターンマッチライブラリが多数存在するが、その大半は単にパターンマッチが便利だからという視点しか持っていない。たしかにパターンマッチは便利であるが、便利なだけでは人々はそれを使おうとはしない。より質的な視点を与える必要があるだろう。 OCamlやHaskellなどの関数型言語では、あらゆるデータは、代数的データ型として定義され、それにともなうデータコンストラクタによって構成される

    optima - 高速パターンマッチライブラリ - Qiita
  • GitHub - froggey/Iota: LLVM to Common Lisp transpiler.

    Iota is an LLVM to CL transpiler, similar to emscripten. It converts LLVM bitcode to safe, portable Common Lisp code. Quick Start ----- # You'll probably want to make this available as a quicklisp local project. # Optional, for parallel builds export MAKEFLAGS=-j2 # Clone the LLVM/Clang repos. ./fetch-llvm.sh # Build LLVM, Clang, and the translator. # This will take a long time unless you have a b

    GitHub - froggey/Iota: LLVM to Common Lisp transpiler.
  • Building GUI App with Electron and Lisp

    This document discusses how an electronics payment company called Pocket Change built their GUI application using Common Lisp instead of JavaScript. They used the Electron framework, which normally uses JavaScript, but modified it to use Common Lisp instead. They spawned a Common Lisp process that communicates bidirectionally with the Electron processes using JSON-RPC over WebSockets. This allows

    Building GUI App with Electron and Lisp
  • プログラミング言語の選択とソフトウェア企業の競争優位性に関する本当のところ Smalltalk, Clojure, Lisp

    SmalltalkSmalltalker の給料が一見高く見えますが、そうではなくて、このグラフが示してるのはSmalltalkerの高齢化です。いっときSmalltalkをやっていた、ぼくの実感にも合います。 Smalltalkは、ある世代とともに消えゆく運命にあると言わざるを得ません。限界集落ならぬ限界言語。細々と伝統芸能的にでも継承していければいいんだけど。プログラミング言語も話者が絶えれば、人類から失われます。 Smalltalkは「オブジェクト思考」というか「メッセージ思考」を身に付けるために、「教養」として多くのプログラマーが学ぶべき言語だと思います。〔注:この段落の「思考」は ‘thinking’ であり、「指向」の誤りではありません。〕 Smalltalkという言語がソフトウェア産業にできる貢献は、まだしばらく続くでしょう。実際のプロジェクトで使わないにしても。 したがって

  • 優秀な非同期ライブラリpromiseがメチャガチャ使いやすい! | るびきち「新生日刊Emacs」

    http://emacs.rubikitch.com/promise/ Emacs LispでPromiseするpromise.elに Emacs専用関数がたくさん追加され プログラミングしやすくなりました。 promise:run-at-time タイマーによる関数実行 promise:delay 遅延評価 promise:time-out タイムアウト promise:make-process プロセス作成 promise:make-process-string プロセス実行結果の文字列 promise:url-retrieve URLにアクセスした結果の文字列 promise:xml-retrieve URLにアクセスした結果のXMLオブジェクト promise:async-start async-start(async.el)による別プロセスで得た結果 以上の新関数を導入してページ

    優秀な非同期ライブラリpromiseがメチャガチャ使いやすい! | るびきち「新生日刊Emacs」
  • Lispのアイデア | POSTD

    Lispと聞くと、冷蔵庫のような大きいサイズのコンピュータや、大文字のアルファベット文字列や括弧の並びといったような過去の時代のことが頭に浮かびます。そう、非常に多くの括弧。何故、オブジェクト指向プログラミングの作成者たちは、そんなにもLispの アイデア に魅了されるのでしょうか。そしてまた、アイデアとされるプログラミング言語というものは、どうやったら説明できるでしょうか。こうしたことを教えてくれなかったコンピュータ科学の教育を責めるべきでしょうか。 Lispは、John McCarthyが書いた Recursive Functions of Symbolic Expressions and Their Interpretation by Machines, Part I という論文によって、初めて世界に登場しました。その中で、McCarthyはプログラミングに新しい多くのアイデアを導入

    Lispのアイデア | POSTD
  • Common LispでかんたんWebスクレイピング - masatoi’s blog

    WebスクレイピングとはWebから情報を自動的に集めてくるクローラを実装するということである。これを実現するにはHTTPクライアントとHTMLパーサ、そしてパースされた木構造から必要な情報を探索、抽出するセレクタがあればいい。Common Lispにはそれぞれに複数のライブラリがあるが、今回はHTTPクライアントにDexador、HTML/XMLパーサにPlump、CSSセレクタにCLSSを使う。これらのライブラリは全てQuicklispから入る。 (ql:quickload :dexador) (ql:quickload :plump) (ql:quickload :clss) 例としてこのロイターの記事 堅調地合い、1万8000円へ戻りを試す展開に=来週の東京株式市場 を分析してみる。 HTTPクライアント: Dexador まずHTTPクライアントでHTMLを取ってくる。これにはde

    Common LispでかんたんWebスクレイピング - masatoi’s blog
  • リリカル☆Lisp開発日記 » Blog Archive » displaced array

    Common Lispにはdisplaced arrayと呼ばれるものがあります。 これは他の配列へのポインタのようなもので、CLHSでは以下のように定義されています。 displaced array n. an array which has no storage of its own, but which is instead indirected to the storage of another array, called its target, at a specified offset, in such a way that any attempt to access the displaced array implicitly references the target array. (CLHS: Glossary-Section D) 試しに使ってみるとこんな感じです。 C

  • Lisp系自作言語のx86_64コンパイラを作り始めたときの話 - Qiita

    ふと、あなた1は、Lisp風の新しいプログラミング言語と、そのネイティブコンパイラとを作りたい、と思い立ちました。 Common LispやSchemeのネイティブコンパイラは、いったいどのように作られているのか? 既存の実装のソースコードを繙ひもとけばいい話ではある。しかしそこではきっと、クロスプラットフォームにするための非質的なコードが繰り広げられているに違いない。まずは自分のアタマで、Lisp系言語のネイティブコンパイラに求められる質的な要素をゼロから考えてみようじゃないか。 この記事では、ガベコレの仔細やインライン展開などの最適化は扱いません。あくまでLispコードのネイティブコードへのコンパイラを初めて実装したときの備忘録的なものです。アセンブリは少しわかるけどマシンコードを直接読むのは初めてという人向け。 何コンパイル? どのようにネイティブコンパイラを作るかということでい

    Lisp系自作言語のx86_64コンパイラを作り始めたときの話 - Qiita
  • Day 13: websocket-driver - 八発白中

    これは fukamachi products advent calendar 2016 の13日目の記事です。ようやく折り返し地点ですね。 今日はwebsocket-driverについて話します。 小さなライブラリではありますが、その後の話の発端となるライブラリなので紹介します。 WebSocket Clackにより通常のHTTP通信を行うWebアプリケーションは作れるようになりました。しかし、よりリアルタイム性の強いもの、たとえばチャットやゲームのようなアプリケーションを作るには貧弱です。 たとえばWebSocket。TCP上のプロトコルであり、通信時の不要なオーバーヘッドが少なく効率的でリアルタイム性の高い通信プロトコルです。 ClackでWebSocketを使う方法はなく、使えるとすればHunchensocketというHunchentoot拡張くらいでした*1。 Socket.IO

    Day 13: websocket-driver - 八発白中
  • OCamlのSedlex+Menhir+LLVMでLispコンパイラを作ろうとしたが行き詰まった件 - Qiita

    言語実装素人ですが、LispのLLVMフロントエンドを作ろうとした記録を残したいと思います。 途中で行き詰まってしまったので、また進展があれば随時更新していきます。 2016/12/10 23:55 追記しました。carで値が取り出せるように。 目標 cons・car・cdrと四則演算+-*/を用いたLispコードをLLVM IRに変換する。 環境 OCaml 4.03.0 oasis 0.4.7 llvm 3.9 sedlex 1.99.3 menhir 20160825 ppx_deriving 4.1 開発の流れ 全体的にここを参考にして進めた。 ビルドツールのセットアップ 開発ディレクトリ直下にsrcディレクトリと_oasisファイルを作成。 OASISFormat: 0.4 Name: Llclimp Version: 0.1.0 Synopsis: LLVM Common Li

    OCamlのSedlex+Menhir+LLVMでLispコンパイラを作ろうとしたが行き詰まった件 - Qiita
  • Day 4: cl-project - 八発白中

    これは fukamachi products advent calendar 2016 の4日目の記事です。 今日はcl-projectについて話します。 コーディングスタイルの提唱 前回の記事のCavemanからは話が前後します。 Clackの思想は疎結合性と再利用性を高めることでした。それはClackを使ったアプリケーションだけでなくClack自身についても同様であり、つまりは一般的なCommon Lispアプリケーション自体の疎結合性を高めることも目指したものでした。 Common Lispにはアプリケーションの分割単位として「パッケージ」と「システム」があります。「システム」はプロジェクトの一つの読み込み単位であり、複数のファイルと複数のパッケージを含みます。 他のプログラム言語に親しんだ人には違和感があるかもしれませんが、Common Lispのパッケージはファイル単位と結びつい

    Day 4: cl-project - 八発白中
  • lem: Common Lispで書かれたEmacsライクなエディタlemを使ってみた - masatoi’s blog

    lem: https://github.com/cxxxr/lem lemはCommon Lispで書かれたEmacsライクなエディタで、拡張もCommon Lispで書ける。cl-charmsというncursesのCFFIラッパーを使っている。 特に何もしてなくても起動が速いが、lemをロードした状態で処理系のコアイメージをダンプすることでさらに速くなる。 インストール 次のroswellのリリースからpath通しておくだけで、ros install cxxxr/lem でlemが使えるようになる。勝った。— Masatoshi SANO (@snmsts) 2016年6月8日 とのことなのでroswellさえ入っていれば導入は簡単。 ros install cxxxr/lemこうすると、 ~/.roswell/local-projects/cxxxr/lem 以下にコードがダウンロード

    lem: Common Lispで書かれたEmacsライクなエディタlemを使ってみた - masatoi’s blog
  • 何度か挫折しつつ不純lispインタプリタを作った - write ahead log

    作りました. github.com 詳細はgithubのREADMEをどうぞ.(酷い英語ですが) 当初は純lispを作ろうと思ったのでpureという名前ですが, tak関数を動かしたいなど欲が出てきたので 純粋でも何でもなくなってます. GCはありますが, マクロはありません. (私がマクロをちゃんと理解してないので) 作成時の参考文献は一番下に記載するので興味のある方はご覧ください. 以下は駄文です. 作り始めたきっかけ 以前から何か言語処理系を作ってみたいなと思っていました. Brainf*ckはともかく, 作ったことがなかったので. それとは全く別に私は今27才で, 25,27,32というのは個人的に特別な節目になる年齢じゃないかと感じていました. SIerにいると年齢と共にプログラミングする機会が減っていくのでなんとなく腕試ししたくなる事がよくあります. 「プログラマを名乗るならこ

    何度か挫折しつつ不純lispインタプリタを作った - write ahead log