プログラミング原人の進化ログ

プログラミング原人の進化論

オレ プログラミング ベンキョウ スル。マナンダ コト カク。

言語-Lisp

Common Lisp で乱数を生成する

乱数を生成するには、random関数を使います。 random 引数より小さい非負の整数の乱数を返してくれます。例:0から9の整数乱数を生成します。 CL-USER> (random 10) 6 CL-USER> (random 10) 8 CL-USER> (random 10) 3 参考 コンラッド・バルスキ(2013)「…

【Common Lisp】loopマクロの使い方まとめ

Common Lispでループ処理に使われるloopマクロの使い方です。網羅的にまとめた資料が少ないので、備忘録的にまとめておこうと思います。 loopマクロには多くの機能があります。なので、最初から全てを抑える必要はないと思います。 この記事の内容 loopマク…

Common Lisp のインクリメント・デクリメント

Common Lispでインクリメントやデクリメントを行う方法です。紹介するマクロはインクリメント・デクリメントだけでなく色々できます。 incf, decf incfは第2引数に指定した分だけ、第1引数の変数の値を大きくします。 (incf 変数 数字) decfは第2引数に指…

【Common Lisp】defmethodコマンドの使い方

defmethodを使って関数を定義する方法です。 目標 defmethodコマンドを使ってジェネリック関数を定義する。 defmethodの利点 データ型によらないジェネリックな関数を定義する際に便利なのが defmethod です。 例えば、引数を2つとる関数を考え、整数が渡さ…

【Common Lisp】型述語まとめ

Common Lisp の型述語の勉強メモです。 型述語 真偽値を返す関数を述語と言います。特にデータ型の判定をするものを型述語と呼びます。 numberp arrayp characterp consp functionp hash-table-p listp stringp symbolp 型の名前に述語(predicate)を表すp…

【Common Lisp】シーケンス関数の基本

ジェネリックプログラミングの一環として、シーケンス関数について勉強したので、そのメモです。 目標 ジェネリックとは何かざっくりと理解する 基本的なシーケンス関数を使えるようにする ジェネリックである、とは? 簡単に言えば、異なるものを同じ方法で…

【Common Lisp】構造体の基本

lispの構造体の勉強をしたのでメモを残しておきます。基本的な使い方です。 構造体とは データ型の1つ。複数の属性を持つオブジェクトをうまく表現することができます。 属性のことをスロットと呼びます。 構造体を作る defstructコマンドで宣言します。 CL…

【Common Lisp】ハッシュテーブルの基本

lispのハッシュテーブルの勉強メモです。 ハッシュテーブル ハッシュテーブルはlispの持つ複合的なデータ型の一つで、キーと値をセットにして管理します。連想リストと似ていますが、より高速に定数時間で要素にアクセスできます。 ハッシュテーブルを作る m…

【Common Lisp】配列の基本

Common Lisp における配列の勉強メモです。 配列 lispのデータ型の1つです。リストと似ていますが、配列の方が特定の要素に高速にアクセスできます。 配列を作る make-array関数で配列を生成できます。 CL-USER> (make-array 3) #(NIL NIL NIL) 頭に # をつ…

【Common Lisp】連想リスト、循環リスト、ドットリスト

リストはLispの基本ですが、単なるリストではなく色々なリストがあります。ドットリスト、循環リスト、連想リストについてまとめます。 ドットリスト 以下に2つの例を挙げます。普通のリスト: CL-USER> (cons 1 (cons 2 (cons 3 nil))) (1 2 3) 終端がnil…

【Common Lisp】条件分岐:if, when, unless, cond

Common Lispの条件分岐についてのメモです。条件分岐のためのコマンドと、それらを使うのに必要な基本的な演算子や関数をまとめておきます。 真偽値 common lispでは、空リストが唯一の偽値です。それ以外は全て真となります。 なお、'(), (), nil, 'nilは空…

【Common Lisp】リストの基本中の基本

リストはLispにおいて非常に大事です。ということで、Common Lispのリストの基本的なアイデアをまとめました。 フォーム Lispのコードはリストで構成されています。このリストは、フォームでなければなりません。フォームとは、先頭の要素がコマンドであるよ…

【Common-Lisp】ash関数でビットシフト

ビットシフトのためのash関数についてのメモです。 ash関数 ash関数はビットシフトを行うLispの組み込み関数。 第1引数に数値を渡し、これをビットシフトの対象とする。 第2引数で左右どちらにシフトするかを指定する。第2引数が1のとき、左にシフト。-…

Common Lisp の変数と関数を定義する方法まとめ

Common Lispでの変数と関数の種類、定義についてのメモです。 変数を定義する グローバル変数 グローバル変数のことをトップレベル定義と呼ぶ。defparameterまたはdefvarで定義する。defvarで定義した場合、値を上書きすることができない。 変数名をアスタリ…