Common Lisp
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*目次 [#j22a3d23]
#contents
*Common Lispとはなんぞや [#ecb50f39]
Lisp(LISt Processor)は仕様が小さいために、さまざまな方言...
そこで、これらの方言を統一しようという事で生まれたのがCom...
ANSIで標準化されていることにも注意していただきたい。これ...
このように、仕様が先にあって実装が後に来るということは今...
これはC/C++やCommon Lispにしか見られない特徴なんじゃない...
**Schemeでよくね? [#xfdf92e2]
実用という点では、Schemeはあまり適しているとはいえない。
また、両者には学習段階でも変数の扱いや関数名の差異が見ら...
*始めるには [#ge43efc7]
まず、処理系を選ばなくてはならない。
代表的なものとして、
|名前|詳細|ライセンス|h
|sbcl|ネイティブコードコンパイラで、使っている人も一番多...
|Clisp|バイトコードコンパイラ。sbclの次くらいに人気|GNU G...
が、お手軽だ。学習用ならどちらも大差は無い。((ClispはTAB...
**UNIX/Linux [#d58cc232]
***Debian/Ubuntu [#ud22148b]
apt-get install sbcl
apt-get install clisp
のどちらかを実行すれば、インストールできるはず。~
ただし、Debianのパッケージは結構古いので~
特にsbclに関しては、公式サイトから最新版を落としてインス...
~
***他のOS [#t0ffec15]
上を参考にどうぞ
**Windows [#b93e0e19]
Clispとsbclでググれば公式サイトが出てくるからそこでダウン...
インストールはほぼ自動だから楽チン。
~
*インスコおわったお [#u7309383]
**起動してみよう! [#f69fcbbb]
コマンドプロンプト等でsbclかclispと入力したら起動するはず
((PATHの設定とかは、Windowsならインストーラーが自動でする...
[1]>
とか
*
とか出ていれば成功だ。~
この状態は、対話式の入出力環境でREPL(Read-Eval-Print-loop...
**ハロワ [#w6041fcc]
早速、REPLに入力してみよう。~
;よりあとはコメントを表すので入力しなくてよい。(ここでは...
(format t "Hello world") ; Hello world
format関数は出力をするのに非常に強力で便利な関数なのだ。
**四則演算 [#m04b2fcb]
***足し算/引き算 [#wc1e0f7f]
(+ 98 1) ; >> 99
演算子が頭にある。これこそがLispの特徴だ。~
ここではとりあえず関数は() ......すなわちリストの頭に表...
尚、次のような表記も有効だ。~
( + 3 8 ) ; >> 11
このように、スペースが二つ以上になると無視される。
引き算は次のようにする。
(- 30 14) ; >> 16
(- 3 6) ; >> -3
***掛け算/割り算 [#s580d143]
(* 5 7) ; >> 35
(/ 3 2) ; >> 3 / 2
(/ 3.0 2) ; >> 1.5
(mod 3 2) ; >> 1
(mod 10 4) ; >> 2
(/ 1 0) ; -----エラーが表示される。
~
掛け算は他のプログラミング言語と大差ないだろう。(演算子...
問題は割り算だ。2番目の例を見れば分かると思うが、Common L...
ただし、小数を割る時には成り立たない。~
また、モデュラー算術も可能だ。~
このほかにも、さまざまな算術のための機能が実装されている。
*関数を作ろう [#wcaea7a6]
関数の定義には、defun関数を使用する。~
構文は、
(defun 関数名 (引数1 引数2 ......) 実行してほしい処理)
だ。さっそく例を見てみよう。
>>(defun 3jo (x) (* x x x))
3jo
>>(3jo 2)
8
>>(defun 3jo (x) (* x x x) () )
3jo
>>(3jo 8)
nil
二つの例を見比べてみると、実行してほしい処理のところが~
(* x x x) と (* x x x) () との2通りがある。~
実は、defunで作られた関数は最後に実行した処理によって出て...
これは実は関数プログラミングの根幹を成すものである。~
Common Lispでは、Return文は必ずしも必要ではないのだ。~
~
ところでこの nil というのはなんだろうか。~
これは否定の論理演算子だ。(nihilのことじゃないかな)~
nilとt (trueのこと)は変数として使用する事が出来ない。~
*変数と定数 [#x6ee9556]
**グローバル変数 [#e6bb98f2]
(defparameter *oppai* 99)
とすると、グローバル変数が定義できる。~
今回は、*oppai*という変数に99を代入している。~
*oppai*
とREPLで入力すれば、99が返ってくる。~
この変数の周りの *(アスタリスク)はグローバル変数であるこ...
~~
他にグローバル変数と定義する方法として、
(defvar *foo* 10)
とする方法がある。
(defvar *foo* 10)
(defvar *foo* 8)
としても、*foo*の値は10のままであるから注意が必要だ。~
(setf((setqというのもあるが、setfの方が新しい。また、set...
とすれば、値を変更できる。
**定数の定義 [#d94dbe0e]
(defconstant お名前 値)
でできる。
setfで値を変更する事は出来ない。
終了行:
*目次 [#j22a3d23]
#contents
*Common Lispとはなんぞや [#ecb50f39]
Lisp(LISt Processor)は仕様が小さいために、さまざまな方言...
そこで、これらの方言を統一しようという事で生まれたのがCom...
ANSIで標準化されていることにも注意していただきたい。これ...
このように、仕様が先にあって実装が後に来るということは今...
これはC/C++やCommon Lispにしか見られない特徴なんじゃない...
**Schemeでよくね? [#xfdf92e2]
実用という点では、Schemeはあまり適しているとはいえない。
また、両者には学習段階でも変数の扱いや関数名の差異が見ら...
*始めるには [#ge43efc7]
まず、処理系を選ばなくてはならない。
代表的なものとして、
|名前|詳細|ライセンス|h
|sbcl|ネイティブコードコンパイラで、使っている人も一番多...
|Clisp|バイトコードコンパイラ。sbclの次くらいに人気|GNU G...
が、お手軽だ。学習用ならどちらも大差は無い。((ClispはTAB...
**UNIX/Linux [#d58cc232]
***Debian/Ubuntu [#ud22148b]
apt-get install sbcl
apt-get install clisp
のどちらかを実行すれば、インストールできるはず。~
ただし、Debianのパッケージは結構古いので~
特にsbclに関しては、公式サイトから最新版を落としてインス...
~
***他のOS [#t0ffec15]
上を参考にどうぞ
**Windows [#b93e0e19]
Clispとsbclでググれば公式サイトが出てくるからそこでダウン...
インストールはほぼ自動だから楽チン。
~
*インスコおわったお [#u7309383]
**起動してみよう! [#f69fcbbb]
コマンドプロンプト等でsbclかclispと入力したら起動するはず
((PATHの設定とかは、Windowsならインストーラーが自動でする...
[1]>
とか
*
とか出ていれば成功だ。~
この状態は、対話式の入出力環境でREPL(Read-Eval-Print-loop...
**ハロワ [#w6041fcc]
早速、REPLに入力してみよう。~
;よりあとはコメントを表すので入力しなくてよい。(ここでは...
(format t "Hello world") ; Hello world
format関数は出力をするのに非常に強力で便利な関数なのだ。
**四則演算 [#m04b2fcb]
***足し算/引き算 [#wc1e0f7f]
(+ 98 1) ; >> 99
演算子が頭にある。これこそがLispの特徴だ。~
ここではとりあえず関数は() ......すなわちリストの頭に表...
尚、次のような表記も有効だ。~
( + 3 8 ) ; >> 11
このように、スペースが二つ以上になると無視される。
引き算は次のようにする。
(- 30 14) ; >> 16
(- 3 6) ; >> -3
***掛け算/割り算 [#s580d143]
(* 5 7) ; >> 35
(/ 3 2) ; >> 3 / 2
(/ 3.0 2) ; >> 1.5
(mod 3 2) ; >> 1
(mod 10 4) ; >> 2
(/ 1 0) ; -----エラーが表示される。
~
掛け算は他のプログラミング言語と大差ないだろう。(演算子...
問題は割り算だ。2番目の例を見れば分かると思うが、Common L...
ただし、小数を割る時には成り立たない。~
また、モデュラー算術も可能だ。~
このほかにも、さまざまな算術のための機能が実装されている。
*関数を作ろう [#wcaea7a6]
関数の定義には、defun関数を使用する。~
構文は、
(defun 関数名 (引数1 引数2 ......) 実行してほしい処理)
だ。さっそく例を見てみよう。
>>(defun 3jo (x) (* x x x))
3jo
>>(3jo 2)
8
>>(defun 3jo (x) (* x x x) () )
3jo
>>(3jo 8)
nil
二つの例を見比べてみると、実行してほしい処理のところが~
(* x x x) と (* x x x) () との2通りがある。~
実は、defunで作られた関数は最後に実行した処理によって出て...
これは実は関数プログラミングの根幹を成すものである。~
Common Lispでは、Return文は必ずしも必要ではないのだ。~
~
ところでこの nil というのはなんだろうか。~
これは否定の論理演算子だ。(nihilのことじゃないかな)~
nilとt (trueのこと)は変数として使用する事が出来ない。~
*変数と定数 [#x6ee9556]
**グローバル変数 [#e6bb98f2]
(defparameter *oppai* 99)
とすると、グローバル変数が定義できる。~
今回は、*oppai*という変数に99を代入している。~
*oppai*
とREPLで入力すれば、99が返ってくる。~
この変数の周りの *(アスタリスク)はグローバル変数であるこ...
~~
他にグローバル変数と定義する方法として、
(defvar *foo* 10)
とする方法がある。
(defvar *foo* 10)
(defvar *foo* 8)
としても、*foo*の値は10のままであるから注意が必要だ。~
(setf((setqというのもあるが、setfの方が新しい。また、set...
とすれば、値を変更できる。
**定数の定義 [#d94dbe0e]
(defconstant お名前 値)
でできる。
setfで値を変更する事は出来ない。
ページ名: