Lispで変数宣言する方法

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)のように、要素を括弧で囲んで表します。
  • シンボル型: シンボルは、文字列とは別のデータ型であり、プログラム内で名前を表すために使われます。例えば、foobarなどがあります。
  • 数値型: 整数型や実数型があります。Lispでは、integer型やfloat型などが用意されています。
  • 文字列型: ダブルクォーテーションで囲まれた文字列を表します。例えば、"Hello, world!"などがあります。
  • ブール型: tは真、nilは偽を表します。
  • 文字リテラル: #\cのように、ハッシュマークとバックスラッシュで始まる文字リテラルを表します。
  • 関数型: 関数は、Lispの中心的な概念の一つです。Lispでは、関数もデータとして扱うことができます。関数型の変数には、関数を代入することができます。Lispでは、lambda式を使って関数を定義することができます。