タグ

ブックマーク / www.nct9.ne.jp (7)

  • Common Lisp 入門

    記号のパターンマッチング (1) Lisp はリスト処理が得意なプログラミング言語ですが、もうひとつの得意分野に「記号処理」があります。今回は記号処理の例題として Lisp の教科書では定番となっている、記号のパターンマッチングというプログラムを説明します。そして、パターンマッチングの応用例として、簡単なエキスパートシステムを作成しましょう。 エキスパートシステムとは、専門家の知識をコンピュータに記憶しておき、それを使って問題を解決する、あるいは問題解決のための手助けを行うように作られたシステムです。ここで作成するプログラムは、このような難しいシステムではありません。「パターンマッチングとバックトラックを組み合わせることでデータの中から解答を導き出す」という簡単なものです。 実をいうと、パターンマッチングとバックトラックを機能に持つプログラミング言語に Prolog があります。簡単なシス

  • Linux Programming / お気楽 Rust プログラミング超入門

    連結リスト 今回は「片方向連結リスト (singly linked list)」を実装してみましょう。連結リストは基的なデータ構造です。他のプログラミング言語、特にガベージコレクションがある言語では、とても簡単にプログラムを作ることができます。ところが、Rust には所有権や借用チェックがあるので、他の言語のように簡単ではありません。他の言語と同じように作ろうとすると、必ずといっていいほど借用チェッカーにひっかかるのではないでしょうか。 案の定、M.Hiroi も借用チェッカーの壁を越えられず途方に暮れていたのですが、Learning Rust With Entirely Too Many Linked Lists という参考文献を見つけたので、Rust における連結リストの基的な作り方を勉強しているところです。作者様に感謝いたします。 Rust は再帰的なデータ構造の扱いが難しいよう

  • Common Lisp 入門 : 番外編

    ●仮想計算機 COMETⅡの簡易シミュレータ 今回は Commn Lisp で計算機の簡易シミュレータを作ってみましょう。実際のコンピュータ、たとえば最新の CPU はもちろんですが、Z80 とか 68000 といった実在する CPU のエミュレータを作るのはとても大変なことです。ですが、簡単な仮想計算機であればそれほど難しいことではありません。 とくに、情報処理技術者試験で使われている仮想計算機 COMETⅡはシンプルなハードウェア構成ですが、CPU の基的な動作を学ぶのに十分な機能を持っています。今回のように、簡単なシミュレータを作ってみよう、という目的にはぴったりの仮想計算機だと思います。 COMETⅡには専用のアセンブリ言語 CASLⅡが規定されています。今回のシミュレータは Common Lisp で作成するので、CASLⅡのプログラムも S 式で記述することにします。また、C

  • お気楽 Scheme プログラミング入門

    これらの命令は Henderson の SECD マシンを参考にしていますが、まったく同じではありません。micro Scheme の仕様にあわせて、新しい命令を追加したり不要な命令を削除しています。なお、今回作成する micro Scheme の仕様は、拙作のページ Scheme で作る micro Scheme で作成したインタプリタと同じです。また、今回のプログラムでもエラーチェックはほとんど行っていません。あしからずご了承ください。 命令の動作は 4 つのレジスタ (S, E, C, D) の状態遷移で表すことができます。ここで、各命令の動作について詳しく説明することにしましょう。各レジスタの値はドットリストで表すことにします。 ●ld ld はレジスタ E から局所変数の値 v を求めてスタックに積む命令です。 s e (ld (i . j) . c) d => (v . s)

    sonota88
    sonota88 2020/07/09
    SECD 仮想マシン
  • M.Hiroi's Home Page / お気楽 ISLisp プログラミング超入門

    WHAT'S NEW 2023/07/09 簡単なプログラムに 遅延ストリーム (2) を追加 2023/07/01 ハッシュ表 (2) を修正 2023/06/27 経路の探索 を修正 2023/06/24 簡単なプログラムに 平衡木 (AA tree) を追加 CONTENTS はじめに ISLisp の機能 動的変数 オブジェクト指向 (ILOS) 特殊な制御構造 高階関数の使い方 Lisp のマップ関数、数列の生成、パスカルの三角形、複数のリストを操作する、格子点と直積集合、フィルター、畳み込み、scan-left と scan-right、ちょっと便利な高階関数 Lisp / Scheme の繰り返し リストの総和、行列の総和、Lisp のタグはレキシカルスコープ、Scheme の継続、tagbody のタグ Easy-ISLisp の機能 コンパイラ、最適化、整数の論理演算、整

  • お気楽 OCaml プログラミング入門

    オブジェクト指向 プログラミングに興味のある方ならば、「オブジェクト指向」という言葉は聞いたことがあると思います。よく使われているオブジェクト指向言語に C++Java があります。また、Lightweight Language と呼ばれているプログラミング言語、たとえば Perl, Python, Ruby, JavaScript などはオブジェクト指向をサポートしています。 多くの言語でサポートされている「オブジェクト指向」ですが、関数型言語では Common Lisp の CLOS (Common Lisp Object System) が有名でしょう。CLOS は Smalltalk, C++, Java などのポピュラーなオブジェクト指向とはちょっと違っていて、興味深い機能がたくさんあります。 OCaml は "Objective Caml" の略なので、もちろんオブジェク

    sonota88
    sonota88 2019/12/01
    「つまり、OCaml におけるクラスはデータ型そのものを表しているのではなく、オブジェクトのデータ型に「名前」を付けただけなのです。」
  • お気楽 OCaml プログラミング入門

    モジュール 「モジュール (module)」はデータ構造とそれを操作する関数を一つにまとめるための仕組みです。最近はモジュールに相当する機能を持つプログラミング言語が多くなりました。もちろん、OCaml にもモジュールがあります。List や Array などの標準ライブラリはモジュールにまとめられています。 ●スタック 簡単な例として「スタック (stack)」というデータ構造を考えてみましょう。次の図を見てください。 図 : スタックの動作例 上図は、バネがついた容器を表していて、上から品物を出し入れすることができます。初めは空の状態です。ここに品物を乗せると、重さによってバネを圧縮し、品物が容器に格納されます。さらにもう一つ品物を上に乗せると、さらにバネを圧縮し、その品物も容器に格納することができます。バネが限界まで圧縮されると、もう品物は追加できなくなります。取り出す場合は、上にあ

    sonota88
    sonota88 2019/11/30
    連結リストを2つ使ったキュー
  • 1