ごみ集めのないLISP 2020年5月 第17回関西Lispユーザ会 @zick_minoh 頭の悪い
メリークリスマス!本記事は Emacs Advent Calendar 2019 の25日目の記事です。 まずはこちらをご覧ください。 java コマンドと同様、Emacs でも "Hello, World!" を出力していますね。 HelloWorld.java を書き換えてコンパイルしたあとも、java コマンドの結果と同じ文字列を出力しています。 これはどういうことかというと、 純度 100% Emacs Lisp で .class ファイルを解析・実行しています。 つまり Emacs が JVM となった瞬間です。おめでとうございます 🎉 当然ながら JVM 全てをカバーできているわけではなく、基本的な部分だけを実装してあります。 今後も開発は続くかもしれないし、続かないかもしれません。 本記事の概要 開発に至った経緯 開発のおはなし 1. .class ファイルの解析 1-1.
プログラミング言語の処理系を実装してみたく思い、LispのようなS式を実行する簡易的な処理系を書いてみました。 「第一級の継続(call/cc)を実装する」というのが一番の目標でした。 ひとまずは動くものができた(と思う)ので、実装するにあたって考えたこと、試したことなどを書き残しておこうと思います。 ソースコードはこちらにあります。 言語を軽く説明 Rubyで実装したS式の簡単な処理系です。 VM(バーチャルマシン)実行方式を採用しました。ソースコードを独自のバイトコードに変換して、それを独自のVMで実行します 扱える値は整数と文字列くらいです。組み込みの関数名などは若干Rubyに寄せています。if、while、変数などは実装してあって、こんなコードが動きます。 (= a 5) (= sum 0) (while (!= a 0) (= sum (+ sum a)) (= a (- a 1
By Robert Smith Simulating a universal, gate-based quantum computer on a classical computer has many uses and benefits. The top benefit is the ability to inspect the amplitudes of the system’s state directly. However, while the mathematics is very well understood, implementing a general-purpose simulator has largely been folk knowledge. In this tutorial, we show how to build an interpreter for a g
To install: go get robpike.io/lisp. This is an implementation of the language defined, with sublime concision, in the first few pages of the LISP 1.5 Programmer's Manual by McCarthy, Abrahams, Edwards, Hart, and Levin, from MIT in 1962. It is a pedagogical experiment to see just how well the interpreter (actually EVALQUOTE/APPLY) defined on page 13 of that book really works. The answer is: perfect
;; &() is object literal used with quasiquote (let ((obj `&(:name "LIPS Scheme" :version ,lips.version))) ;; you can access JavaScript properties ;; with dot notation, print is display + newline (print (string-append obj.name " " obj.version)) ;; you can mix scheme and JavaScript (setTimeout (lambda () (alert (JSON.stringify obj))) 1000) #void) With LIPS you can mix Scheme and JavaScript. You can
このブログでは限定継続について過去に何回か記事を書きました: LunarMLと継続限定継続と例外とモナド 今回、LunarML向けのVMに限定継続を実装してみて理解が深まったので、改めて記事にします。 限定継続:スタックを使ったざっくりとした説明 今回はスタックを使って限定継続をざっくりと説明してみます。 関数という概念を持つプログラミング言語では、スタックを使って関数の呼び出しを管理することが多いです。コールスタックとか、スタックのバックトレースとか言いますよね。ここではネイティブのスタックか仮想マシンのスタックかというのは問いません。 関数を呼び出すと、フレームと呼ばれる領域がスタックに確保されて、関数への引数やローカル変数はそこに確保されたりします。 例えば、以下のプログラムを考えます: void g() { // すごい計算 } void f() { double j; g();
Haku A toy functional programming language based on literary Japanese. Is Haku for you? Haku lets you write programs that look very much like written Japanese. So you need to be familiar with written Japanese to program in Haku. I have added translations and explanations to the documentation. Haku is an experiment, not a practical programming language. Several of its features are rather contrary.
Glispを開発している中で、このエントリにも上げたような問題があったので言語処理系自体を、一般的なLisp評価器とは異なった、よりGUIやデザインとの親和性の高いものへとアップデートしようとしています。しかしまた色々行き詰まった所が出てきたので、言語化も兼ねて今一度悩んでいるところを書き出しておきます。 言い訳までに、僕はただの映像専攻の美大中退者でして、言語処理系に関して何の専門教育を受けたこともないので、車輪の再発明をしているような予感もありますし、以下の考察も適切ではないかもしれません。もし、この辺勉強するとスッキリするよ~とか、こういう概念があるんよ~みたいなアドバイスがあれば、断片的にでも構わないので教えてくださるととても嬉しいです。 Lispの何が問題だったか? そのシンボルが指し示す値、関数の実体、そして型が、評価されるまで分からない(Lispは動的型付けなので)その関数の
Oct 2019 Bel is a spec for a new dialect of Lisp, written in itself. This should sound familiar to people who know about Lisp's origins, because it's the way Lisp began. It consists of two text files meant to be read in parallel: a guide to the Bel language, and the Bel source. For those who just want to see some code examples, there's a file of those. But of course the Bel source is also a code e
In honor of the contributions made by Church and McCarthy, I wrote this project and the accompanying article to show how anyone can write a tiny Lisp interpreter in a few lines of C or in any "C-like" programming language for that matter. I attempted to preserve the original meaning and flavor of Lisp as much as possible. As a result, the C code in this project is strongly Lisp-like in compact for
前書き もともとは以下の記事の最後のほうに書いていたが、どうせ誰も読まないので該当箇所をこの記事に写した。 面白いサイトまとめ Lispの真実 Lisp: 良い知らせ、悪い知らせ、大成功への提言 A Road to Common Lisp (Common Lisp への道) Lisp:よくある誤解 Lisp:よくある正解 The Lisp Curse(Lispの呪い) コードウォッチ:関数型プログラミングの自惚れ問題 デザインの「悪い方がよい」原則 Lispがそんなにすごいなら ---If Lisp Is So Great--- PythonとLispの関係について 人気の言語を作るには ---Being Popular--- 技術野郎の復讐---Revenge of the Nerds--- 普通のやつらの上を行け ---Beating the Averages--- 「技術野郎の復讐-
はじめに 本記事は、Emacs のカレンダー機能・天文計算ツールの簡単な紹介、Emacsでサポートされている世界の暦、また本フレームワークを使った、和暦の実装を試みと、その際に気づいた注意点を紹介します。また「またアジア各国の旧暦に関する雑学」についても触れています。 世界の暦 世界には様々な暦が存在します。 人類が月の満ち欠けを意識し、農耕・牧畜、そして宗教祭礼を始めた頃から、一年のうち、どの時期に何をするかを記録することは、社会生活を営む上で重要となり、そこから暦の概念は始まったと考えられます。 その中でもグレゴリオ暦は、世界的に共通の暦として使われ、日本でも多くの年中行事の基準となっています。 しかし、欧米を除いて単一の暦を使っている国はあまり多くはなく、ほとんどの国が、ローカルな暦とグレゴリオ暦を併用しています。グレゴリオ暦のみを使っている日本は、欧米以外では数少ない例外です。 た
昨日は、ドキュメントとは木であり、その木はXML、さらにいうとXMLアプリケーションとして形作られる、という話をしました。 一般にドキュメントは、生のままの構造として読み手に与えられるものではありません。 ドキュメントの構造が何らかのXMLアプリケーションであれば、本来はそのスキーマに従って解釈し、しかるべきスタイルを適用することになります。 ここで、しばしば厄介になるのは、XMLアプリケーションのスキーマを正しく扱うのはなかなか大変だということです。 そもそも、プロプラなXMLアプリケーションだと、スキーマの定義が手に入らない場合もあります。 そういった「野良XMLをどうやって扱うか」が今日からの話題です。 でもその前に、昨日の記事の最後で紹介したSXMLについて雑に補足しておきます。 XMLをSXMLに引き写すことで見える景色 さて、昨日はSXMLという技術を紹介しました。 SXMLの
Lisp in Life is a Lisp interpreter implemented in Conway’s Game of Life. The entire pattern is viewable on the browser here. To the best of my knowledge, this is the first time a high-level programming language was interpreted in Conway’s Game of Life. Running Lisp on the Game of Life Lisp is a language with a simple and elegant design, having an extensive ability to express sophisticated ideas as
ポール・グレハムの記事の一つにWhat Makes Lisp Different?というものがある: www.paulgraham.com ポール・グレハムらしくよく書かれていて、C言語などと比較した場合のLispの特徴をうまく捉えているように思う。 その中の一つが Recursion. Recursion existed as a mathematical concept before Lisp of course, but Lisp was the first programming language to support it. (It's arguably implicit in making functions first class objects.) こうある通り、私も今まで深く考えたこともなく「プログラミングにおける再帰はLispが由来」と考えていたのだが、前回の記事を書く
Lisp一人 Advent Calendar 2021 2日目の記事です。 bitは1969年から2001年まで刊行されていた、コンピューター科学寄りのコンピューター誌でした。 Lispの記事も豊富にあるのですが、その他の記事も非常に興味深い内容で今読んでも面白い内容です。 復刊の声も強かったのですが、この度イースト株式会社の尽力により電子復刻となったようです。 素晴らしい! 共立出版 コンピュータサイエンス誌『bit』 bitには古くは後藤英一先生のLISP連載等に始まり、今読んでも面白いLisp記事が沢山あります。 以前から日本で出版されたLisp本の目録を恐らく数十〜百時間という無駄な時間を掛けて作成していましたが、bit電子版復刻によりついに火を吹く時が来たようです。 このまとめには、bit以外の本も載っていますが、ページ内で適当に検索してもらって、リンクに飛べばAmazonの商品
Lisp is a language with a simple and elegant design, having an extensive ability to express sophisticated ideas as simple programs. Notably, the powerful feature of macros could be used to modify the language's syntax to write programs in a highly flexible way. For example, macros can be used to introduce new programming paradigms to the language, as demonstrated in object-oriented-like.lisp (whic
古から存在するプログラミング言語Lisp。その通り名の一つに「神の言語」というものがある。 なんという甘美な響きだろうか。この名前だけで男子中学生は全員習得することを決心するだろう。そのくらいインパクトのある名前である。文部科学省はプログラミング教育を推進するにあたって、この通り名を公式に採用することを真剣に検討されると良いと思う。 さて、「神の言語」の勉強を始めてみて驚くだろう。どのあたりが神なのかよくわからないのだ。たしかに丸括弧は多い。多いが、それと神との関連性はよくわからない。 何か土着の信仰の話なのだろうか?あなたがそう戸惑うのも無理からぬことだ。 私自身、前からこのフレーズは聞いたことがあったが、あまり理解していなかった。そこで今回改めて調べてみたので共有しようと思う。 「神の言語」の由来 そもそも、Lispは神の言語だと誰が言い出したのか?どうやら海外でそのような歌が作られた
Hey there, it’s been awhile! We’re back to share some more exciting news about Guile Hoot, a WebAssembly toolchain and Scheme→WASM compiler. In our last post we demonstrated that the Guile Hoot toolchain can be used to assemble programs written in WebAssembly Text (WAT) format, which allowed us to develop for the WASM-4 fantasy console. That was pretty cool, of course, but our goal is to compile S
ランキング参加中iPhone ランキング参加中Apple Modified 2024/3/22 iOS16のiPhoneで使用可能な設定アプリおよび標準アプリのURLスキームを紹介しています. スポンサーリンク 検証 環境および先頭の文字列について 設定アプリ(起動) アカウント Apple ID iCloud > 名前、電話番号、メール iCloud > パスワードとセキュリティ iCloud > お支払いと配達先 > お支払いを追加 サブスクリプション iCloud iCloud > パスワードとキーチェーン iCloud > バックアップ 探す ファミリー共有 連絡先キー確認 Apple Pencil Wi-Fi Bluetooth モバイル通信 通信のオプション(シングルSIMの場合) 通信のオプション(デュアルSIMの場合) "インターネット共有"を設定 通知 プレビューを表示
github.com/yubrot/llrl Rust + LLVMで自作言語をセルフホスティングした話 Rust + LLVM による自作プログラミング言語処理系。大きな特徴は以下の 3 つ。 Hindley-Milner ベースの型推論による静的型付け (+型クラス) Lisp-like な S 式によるシンタックスと LLVM JIT によるマクロ 完全なセルフホスティングコンパイラ実装 目標: セルフホスティング llrl は複合的な理由で作り始めたが、とにかく一度完全にセルフホストされた言語処理系を実装したいという気持ちからセルフホスティングを最優先の目標とした。 プログラミング言語のセルフホスティングは、以下のような明確なゴールを設定できる。 何らかの既存のプログラミング言語によって自作言語コンパイラを実装する → 世代 0 自作言語、およびその標準ライブラリをコンパイラを実装
LISP has been described as the Maxwell's equations of software. Yet there's been very little focus to date on reducing these equations to their simplest possible form. Even the original LISP paper from the 1960's defines LISP with nonessential elements, e.g. LABEL. This project aims to solve that by doing three things: We provide a LISP implementation that's written in LISP, as a single pure expre
私は日頃 emacs を使っています。emacs では設定を Lisp で書く必要があります。世界の誰かが作ったカスタマイズを使うのも便利ですが、せっかくなので自分でもカスタマイズしてみたい。というわけで 入門 を読みながら手を動かしてみようと思いました。 結局読んだのは全体の1/4程度ですが、それをまとめたものを下記に残します。語調は断定的になっていますが、自信は全くありません。誤りが見つかったらご指摘いただければと思います。 Lisp は List processing という言葉に由来するように、リストによってプログラムを表現する言語である。とはいえ、いきなりリストについて説明することはできないので、基本的な語句から紹介する。 アトムとリスト これ以上分解できないものを アトム という。アトムには number, symbol, string がある。たとえば下のようなものがアトムで
WHAT'S NEW 2024/3/29 Common Lisp 入門: 入門編に 分数 [2] を追加 2024/3/29 自作ライブラリ編: ntheory をバージョンアップ (ver 0.2.10) 2024/3/15 Common Lisp 入門: 入門編に 分数 を追加 CONTENTS お気楽 Common Lisp プログラミング入門 入門編 応用編 パズルの解法編 思考ルーチン編 圧縮アルゴリズム編 micro Scheme 編 お気楽 CLOS プログラミング入門 番外編 仮想計算機 COMETⅡ Yet Another Common Lisp Problems 自作ライブラリ編 (別ページへ移動) お気楽 ISLisp プログラミング超入門 (別ページへ移動) xyzzy Lisp Programming (別ページへ移動) 参考文献, URL お気楽 Common
もともとQiitaで書いていた記事ですが、Qiitaを退会したところすべて消えてしまいました。 あのまとめどこいったの?と訊ねられるので、Zennで復活 SBCL (これがおすすめだ!) 2024年もSBCLが充実の一年ではないでしょうか(2015年から変化なし) 大体月に一度リリースしていますが、途切れることもなく安定しています。 以前(2010年)Quicklispでアンケートを取りましたが、Quicklisp利用者の8割以上はSBCL利用者のようです。 2024年も大勢に変化はないように思いますが、以前よりSBCL以外の処理系の開発の勢いが弱くなっているようなところもあるので、さらにシェアを伸ばしているかもしれません。 http://xach.livejournal.com/271794.html その他の処理系 CLISP (Lisp入門者にはこれがお勧め) この10年位開発が停滞
📢 ⭐ Celebrating 1001 learners on my Common Lisp course with this coupon code. Thank you! Recently added: 17 videos on MACROS. More info. 🎥 I also have cool Lisp showcases on Youtube . The last ones: how to build a web app in Common Lisp, part 1 and 2. This is a description of the Common Lisp ecosystem, as of January, 2021, from the perspective of a user and contributor. The purpose of this artic
Once upon a time, someone with the handle “entha_saava” posted this question on Hacker News: Can someone knowledgeable explain how are lisp REPLs different from Python / Ruby REPLs? What is the differentiating point of REPL driven development? The answer is that there is a particular kind of programming in which you build a program by interacting with it as it runs, and there are certain languages
とうとうApple MusicにPerfumeが追加されたので、ここ数日はワンルーム・ディスコを聞きながらコーディングをしている。 Perfume、良い。良すぎる。幸せになれる。 そう、幸せといえばLisp。 1週間労働を耐え抜いてまた週末にのんびりLispを書ける。 安定感がすごい。 そんな感じで週末Lisperとして今日もLispに向き合っていたのだけれど、そういえば前にLispでCのコンパイラを書く個人プロジェクトを立ち上げたものの完全に放置していたのを思い出した。 で、久しぶりに取り組もうと書きかけのコードを見ていたのだが、なんかグッとこない。 どうも自分のコードにときめかない... ということで中途半端な自分のクソコードをガチャガチャ触って気分の悪い土曜日にしてしまうくらいならまた別のプロジェクトをやった方がいいだろうと判断。 ただ、全く別の何かをやるのも少し気が引けたので、コン
純粋関数型Lisp方言であるLispKit LispのインタプリタとSECD抽象機械の機械語へのコンパイラを作成する。 タネ本はHendersonの「Functional Programming - Application & Interpretation」で、この本に載っているISWIMやPASCALのコードを大体なぞるようにPythonで書いていく。(最近出た「コンパイラー原理と構造ー」でもSECDマシンへのコンパイルの話題が出ているらしいがまだ届いていないので未確認・・・) 例によって長くなるので複数の記事に分ける。 流れとしては以下のようになる: LispKit Lispの紹介 (本記事) パーサとAST インタプリタ 前編 後編 SECD抽象機械の実装 1 2 3 SECD機械語へのコンパイラ SECD抽象機械ガベージコレクション LispKit Lisp LispKit Lis
Learn Lisp The Hard Way (Second Draft, In-Progress) by "the Phoeron" Colin J.E. Lupton ;; Welcome to L(λ)THW! (let ((llthw '(learn lisp the hard way))) (format t "~{~@(~A~)~^ ~}, because ~{~A~^ ~} is easier!" llthw (cddr llthw))) ;; Common Lisp: Powerful, Expressive, Programmable, General Purpose, Multi-Paradigm. This is a draft-in-progress edition of Learn Lisp the Hard Way. Content is being cons
初めに 先日Rustの勉強で、jpmens/joをRustに移植してみたんですが、 ちょっと課題がシンプル過ぎたので、Lisp処理系を書いてみました。 本記事は「こんなことをやったよ」くらいの内容で、実装について細かくは書いていないため、 それでも興味ある方は読んでもらえたら嬉しいです。 rispについて 四則演算、変数、関数しか動かない簡単なインタプリタです。 実装 Lisp自体がよくわかっていないので、お気楽 Common Lisp プログラミング入門を読みつつ雰囲気を掴んでいまた。 Lispのリスト構造は(関数 引数...)という感じなので、stack/pop すれば動くかなと思って、最初はこんな感じに雑に実装していました。 初期実装 fn eval(&mut self, chars: &mut Peekable<Chars>) -> String { loop { let ch =
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く