5日目のためのエントリです。)FactorでLISPを作りました。https://github.com/zick/FactorLispFactorはいわゆるスタック指向型のプログラミング言語です。いう言葉を好んで使っているようですが、この言葉はあまりメジャーではない気がします。今年の春、訳あって42個のプログラミング言語でLISP処理系を実装することになりました。これはその7つ目です。Factorを選んだ理由はよく覚えていないのですが、確かWikipediaを眺めてテキトーに決めたんだと思います。Lua、Python、Ruby、R、Perlといった有名な(少なくても私が名前を知っていた)言語が続いていたので変わったものをやりたいという気持ちもあったかもしれません。1と2がスタックに積まれて可算が実行されるわけです。あたりを知っておくと便利です。階乗は次のように書けます。その後の括弧はコメントで実行結果には何も影響を与えません。以降の残りの部分は読者の練習問題とします。「スタックから1つものを消費して、スタックに1つものを置く」ということを表しています。前述のとおり、これらはコメントで実行結果には影響しませんが、Factorはコンパイル時にワードが実際にこのコメントと合致しているか確かめます。ようにコードが分岐する場合もスタックに置かれるものの数が変わらないかチェックしてくれるわけです。)といった具合に非常に分かりやすいエラーメッセージを出してくれるわけです。オブジェクトFactorはオブジェクト指向言語でもあります。)を作れたり、色々と凄いんです。これでLISPのデータを定義してやれば色々と凄そうなわけです。LISPを作るくらいだとそんな高度な機能も必要ありませんが。;これが何をしているかは明らかなのでコードの解説は読者の練習問題とします。ようにコードをオブジェクトとして扱うことが出来ます。囲まれた部分がそれです。いったプリミティブが自然な形で使えるし、高階ワードを作ることもできるわけです。これには制約があります。保証できないとか何とか。使うとコンパイルエラーになるということです。詳しくは、詳しい人に聞いてください。使わない方向に逃げることになって後悔しました。スタックについての究極の疑問の答えFactorのマニュアルには「変数に名前をつける機能とかあるから、別にすべてをスタックでやらなくてもいいよ」と書いてありましたが、今回はあえてすべてをスタックの上でやりきりました。試行錯誤しているうちに一つのことに気付きました。一度に触るのがスタックトップから3つまでだと非常に簡単にプログラムが書けるのに対して、スタックトップから4つ目以降を触わろうとすると非常にぎこちないプログラムになる。なった原因の一つとして、Factorが提供する組み込みのワードはスタックトップから3つ目までを操作するものが多い、ということもあるでしょうが、そもそも4つを超えたあたりで人間には色々と辛い、というのがでかい気がします。Nobleと言っているので世の中の真理ではないのかと勝手に思っておきます。スタックは熱いうちに打て一日で「ドリャ」っとFactorのプログラムを書き上げる場合は、スタックの状態がどうなってるか、ある程度頭のなかに残っているからいいんですが、数日、数カ月と経ってから再度プログラムを編集しようとすると、スタックがどうなっているのか頭から完全に抜けているので辛いです。回避策は、長いワードを作らないことと、やはり1度に3つまでしかスタックに積まないことでしょうか。この辺りは誰か詳しい人にでも聞いてください。小学生並みの感想スタックは楽しい。Reply返信をキャンセルする。