Lispで変数を定義する
Lispでは、変数を定義するために「defvar」、「defparameter」、「let」の3つの方法があります。
1.defparameter:可変なグローバル変数
defparameterはグローバルな変数を定義するための特別な形式です。 defparameterを使って定義された変数は、再度定義することで値を上書きすることができます。
例:
(defparameter x 10) ; xをグローバル変数として定義 (defparameter y "Hello") ; yをグローバル変数として定義
ちなみに、グローバルな変数をLispで定義する場合には、「*」で変数をはさんで定義する慣習があります。(ローカル変数と区別するため)
(defparameter *small* 1) (defparameter *big* 100)
2.defvar:不変なグローバル変数
defvarはグローバル変数を定義するための特別な形式です。すでに存在する変数を再定義した場合は、前の値が維持されます。 定義された変数は、ファイルをまたいで利用することができます。
例:
(defvar x 10) ; xをグローバル変数として定義 (defvar y "Hello") ; yをグローバル変数として定義
3.let:ローカル変数
letはローカルな変数を定義するための特別な形式です。letで定義された変数は、let式内でのみ利用可能であり、let式を抜けると破棄されます。
例:
(let ((x 10) (y "Hello")) (print x) (print y) )
上記の例では、xとyが定義され、それぞれ10と"Hello"に設定されます。let式内でprint関数を使ってそれらを出力し、let式が終了するとxとyは破棄されます。
データ型
Lispは、動的型付け言語であり、リスト構造を重視するプログラミング言語です。以下では、Lispのリテラルとデータ型について説明します。
Lispの主なデータ型には、以下のようなものがあります。
- リスト型: Lispではリストが非常に重要な役割を担っています。リストは、要素が順序付けされたリスト構造で、
(1 2 3)
のように、要素を括弧で囲んで表します。 - シンボル型: シンボルは、文字列とは別のデータ型であり、プログラム内で名前を表すために使われます。例えば、
foo
やbar
などがあります。 - 数値型: 整数型や実数型があります。Lispでは、
integer
型やfloat
型などが用意されています。 - 文字列型: ダブルクォーテーションで囲まれた文字列を表します。例えば、
"Hello, world!"
などがあります。 - ブール型:
t
は真、nil
は偽を表します。 - 文字リテラル:
#\c
のように、ハッシュマークとバックスラッシュで始まる文字リテラルを表します。 - 関数型: 関数は、Lispの中心的な概念の一つです。Lispでは、関数もデータとして扱うことができます。関数型の変数には、関数を代入することができます。Lispでは、
lambda
式を使って関数を定義することができます。