つい最近まで知りませんでした… Schemeを使っている方には「letで末尾再帰するときのアレをEmacsでも使えるようにする」というので通じるとは思うのですが… 総和っぽいのを求める関数を定義してみましょう。 (defun sum-rec (n &optional sum) (if (<= 0 n) (sum-rec (1- n) (+ n (or sum 0))) sum)) (sum-rec 100) ;=> 5050 アルゴリズムも使い方もめちゃ簡単なのですが、この実装には問題があります。 Lispに限らずよくあるプログラミング言語には、関数呼び出しの「深さ」と、その上限という概念があります。関数呼び出しをして、呼び出された関数から関数を呼ぶと深さは1追加され、その関数が実行終了すると深さは1減ります。 なぜこの呼び出しの深さという数が大事なのかというと、一般的なプログラムでは繰り

「本記事は、技術的な視点から情報を提供することを目的としております。内容については可能な限り正確性を期しておりますが、記事内の見解は執筆者の意見や理解に基づいており、すべての方にとって普遍的な結論を示すものではありません。技術の分野は常に進化し、新たな知見が追加されることもあります。ご意見がある場合には、建設的な対話を歓迎いたしますが、批判的な意見を展開する際も、お互いの尊重を大切にしたコミュニケーションを心がけていただけると幸いです。」 タイトル: 「東京プログラマー リスプを書かずにはいられない物語」 新宿の夜景を見下ろすカフェで、主人公の大輔は、ノートパソコンに向かって静かにキーボードを叩いていた。彼は東京で働くプログラマー。コードの世界に浸り、特に最近夢中になっているのが関数型言語LISPだった。 LISPは、数学のように純粋で美しいロジックが展開できる言語。大輔は「この関数型の世

前回に引き続き、人工知能の父の一人であるジョン・マッカーシーについて触れていこう。 マッカーシーは1950年代半ばに人工知能(Artificial Intelligence)という用語を考案し、「ダートマス会議」の中心人物として分野の発展に多く貢献した。 この時代以前にもサイバネティクスという言葉に代表される同様の分野の研究は行われていたのだが、マッカーシーは30歳前にしてここに新たな潮流をもたらす核となったわけである。 ジョン・マッカーシー ■マッカーシーとLisp マッカーシーは、コンピューティングの歴史に残る「知的な発明」を多く生み出した。彼が学生だった頃はコンピューターを専門の研究分野としていた人はもちろんいなかったわけだが、数学や科学の他分野で訓練を積んだ研究者たちが、培った知見や研究態度をコンピューティングの分野で発揮することによって、異なる考え方を含んだ豊かな土壌が生まれるこ
アラン・ケイの“メッセージングによるプログラミング”という着想に基づき(非同期処理などいろいろ足りていないながらも──)比較的忠実に実装された1970年代の非常に古いSmalltalk-72に実際に触れてみるシリーズ 第2弾です(なお最新のSmalltalkについてはPharo などでお楽しみください!)。 今回は謎言語「Smalltalk-71」で書かれたスペースウォー・ゲームを Smalltalk-72に移植して動かすことを目指します。前回(2019年)を含む他の記事はこちらから→Smalltalk-72で遊ぶOOPの原点 | Advent Calendar2023 - Qiita 描いて移動するだけの spaceship 複数の宇宙船のキーボードからの同時操作を早く試さないといけないので、まず移動 moveship と描画 display ship のみに限定した spacesh

☆ consult.el の非同期コマンドの仕組み このエントリはEmacsのAdvent Calendar2022の9日目用です。 以前の記事「はてなブックマーク用のconsultコマンドを作っている」で書いた consult-hatena-bookmark を改良するにあたり、今年夏から秋にかけて、(自分としては)かなり consult.el のコードを読みました。 そのコードリーディングの中で、consult.el が非同期な候補の読み込みをどうやっているのか、だいぶわかったのでご紹介します。 公式で非同期で読んでいる consult コマンドのまねをしたい 公式で用意されている consult コマンドの中で、候補を非同期で読んでいるタイプのものは次などがあります。 consult-grep consult-ripgrep consult-man consult-find コマン

初めに 先日Rustの勉強で、jpmens/joをRustに移植してみたんですが、 ちょっと課題がシンプル過ぎたので、Lisp処理系を書いてみました。本記事は「こんなことをやったよ」くらいの内容で、実装について細かくは書いていないため、 それでも興味ある方は読んでもらえたら嬉しいです。 rispについて 四則演算、変数、関数しか動かない簡単なインタプリタです。 実装 Lisp自体がよくわかっていないので、お気楽 Common Lisp プログラミング入門を読みつつ雰囲気を掴んでいまた。 Lispのリスト構造は(関数 引数...)という感じなので、stack/pop すれば動くかなと思って、最初はこんな感じに雑に実装していました。 初期実装 fn eval(&mut self, chars: &mut Peekable<Chars>) -> String { loop { let ch =

本記事は、Mikel Evins氏のOn repl-drivenprogrammingの翻訳を、本人の御了承を得て公開するものです。なお、関連記事であるProgramming as teachingの翻訳も公開していますので、どうぞご覧ください。 REPL駆動プログラミングについて 2020-12-18 by Mikel Evins その昔、「entha_saava」というハンドルネームの人が、Hacker Newsにこんな質問を投稿していました。 誰か詳しい方に LispのREPL とPythonやRubyのREPLがどう違うのかを説明してもらえないでしょうか? LispのREPL駆動開発の差別化ポイントは何ですか? その答えは、プログラムを実行しながら対話することでプログラムを構築する特有のプログラミング手法があり、そのような手法をサポートするために一から設計された言語やランタイム

Many years ago, Peter Norvig wrote a beautiful article aboutcreating a lisp interpreter inPython.It’s the most fun tutorial I’ve seen, notjust becauseit teaches you about my favorite language family (Lisp), but becauseit cuts through to the essence of interpreters, is fun to follow and quick to finish. Recently, I had some time and wanted to learnRust.It’s a beautiful systems language, and
プログラミングをより深く理解するための近道は、プログラミング言語を実装してみること。SchemeのサブセットをRubyで実装していくことで、プログラムはどう実行されるのか、その基本がはっきり分かります。 ※本書はCC BYにより配布されています。上記の「買い物かごへ」ボタンからは有償で購入できます。無料で入手したい場合は、下記リンクよりダウンロードしてください。なお、有償版も無償版も内容は同一です。 EPUB版PDF版内容紹介プログラムは書けても、その基礎となっている計算機科学(コンピュータサイエンス) の理解があやふやな人を、著者は多く見てきました。プログラミングに自信があるという人が、もう一歩先に進める道を示したいというのが、この文書を書き始めた動機です。 この文書を読むことで次の効果が得られることを期待しています。 プログラミング言語とは何かを深く理解することで、プログラミングのレベ

概要 基本的にEmacs Lisp (または、Lisp 自体)をあまり知らない方向けです。Emacs Lisp でどんなコードが書けるのかを知って、興味を持ってもらえればと書きました。 さて、Lisp はマクロで構文を拡張出来る事が特徴ですが、もちろんEmacs Lisp も例外ではなく、フィボナッチ関数を色々な書き方で実装する事が出来ます。 今回は、それ以外にも、ジェネレータ版、遅延評価版、果てはスタックマシーンのコードを直接記述する方法まで、取り揃えました。 (それぞれの関数は、簡単の為、引数に負の値が指定されない事を前提にしています。) 内訳は以下の通りです。 再帰呼び出し系 fib-tail-recursion fib-double-recursion ループ系 (マクロを展開すると結局は同じ様なコードになるけど、色々な書き方が出来る) fib-while fib-dotim

ここ最近、Glispというアプリをつくっています。Lisp ベースのベクタードローイングツールで、Creative Coding と伝統的なチマチマやるデザインとの合わせ技っぽい使い勝手を目指してます。 ひとまずCuushe さんのビデオに手入れ続けて止まらないのが気が済んでからなのですが(ごめんなさい…)、終わったら本格的にこれに注力してみたいなと思っとります。だから助成金やファウンディング含めてみなさんに色々ご相談したいです。 #glisp -Twitter Search /Twitter これが実現したらようやく「こいつなんか意味分からん事言って Adobe に因縁つけてるな」みたいなんがもう少し多くの人に理解してもらえる気がしています。少なくともベクターグラフィックに関しては、ソフトの使い勝手に気が散ってツール開発をしないとしんどくなる体質が改善して実制作に集中出来るようになれ

Lispにおいて,基本的なデータ構造はドット対 (dotted pair)である. ドット対はconsセルと呼ばれることもある. ドット対は,cons 関数によって作成される. (cons 1 2) (1 . 2) (cons 1 2) により,数値1と数値2のドット対が作成されている. ドット対は (1 . 2) のように表示され, 左側は car 要素,右側は cdr 要素と呼ばれる. ドット対を以下のように図示することにする. 丸はアトム(数値や記号)を表し,箱がドット対を表している. 箱の左側がドット対の左側の要素 (carの部分), 右側が右側の要素 (cdrの部分)に対応する. (cons (cons 1 2) (cons 3 4)) で作成される データ構造 ((1 . 2) . (3 . 4)) を図示すると以下のようになる.
ところでこのリスト内包表記、チューリング完全だって知ってましたか? こちらの記事でそのことが示されています。 リスト内包表記の活用と悪用 by @KTakahiro1729 あああっ! 開かれるPythonワンライナー&難読化の世界!! ステキすぎる!!! 超カッコいい!!!! ……でも、われわれはbrainfxxkだけで満足していてよいのでしょうか。ぼくは、もっと抽象的で、カッコよくて、とっても使いやすい枠組みがあれば、もっといろんなことができて楽しいと思うんです。 たとえば、LISPとか。 ほかには、LISPとか。 そういうことをニヤニヤと妄想してたら、リスト内包表記によるLISP実装が生えてきました。なにこれ! できたもの このようなものができました! 各ソースファイルは以下のようなポジションになっています: lisc.py: 全部を一つのリスト内包表記で書いたもの lisc_par

Common Lispは非常に単純でありながら簡単に拡張可能な構文を持つ高水準言語です。Lispは昔からAIプログラミングに活用されてきましたが、最近では記号処理ベースのAIから機械学習ベースのAIへと世の中の関心が移っており、Pythonなどが主に用いられるようになっています。 とはいえ、Common Lispは機械学習のような科学計算にも向いています(Common Lispが機械学習に向いていると考えるこれだけの理由)。 Common Lispの科学計算に適した特徴としては、例えば以下のようなものが挙げられるでしょう。 最適化されたネイティブコードを吐き出す優秀なコンパイラがOSSにも商用にも存在する 高水準言語でありながら低レベルな世界に降りていって最適化することもできるので、開発効率と実行効率のバランスを取りやすい Cライブラリを簡単に利用できるインターフェースがある この連載では

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く