×[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
prev>>Lispの演算| HOME |next>>Lispの文字出力
関数を定義しよう
目的に合った処理をさせるために関数を自分で作ることができます。関数を定義するためには定義をするための関数を使います。
"(defun 関数名 (仮引数1 仮引数2 ...) 仮引数を含む手続き)"
仮引数とは実際の具体的な数字や文字などではなく、手続きに組み込まれる予定の仮の値のことを仮引数といいます。そこに1や2など、実際の値(実引数)が読み込まれるたびに順次置換されていきます。
****
(defun add (x y) (+ x y))
****
これで関数の定義はできました。関数の使い方は前の記事のとおり"(関数名 引数1 引数2 ...)"です。
****
; [1]> (add 2 3)
; 5
****
引数がない関数の定義をしよう
関数の定義は必ず引数がなくとも定義することができます。使い方の使い方の例を見てみましょう。
"(defun 関数名 () 仮引数がない手続き)"
****
(defun three () (+ 1 2))
; [1]> (three)
; 3
(defun tmp () (three))
; [2]> (tmp)
; 3
****
文字を扱う場合は前にアポストロフィを記述します。
****
(defun moji () 'test)
; [2]> (moji)
; TEST
****
引数なしの関数を定義するものに類似としてsetq関数があります。
"(setq 変数 値)"
変数とは値を格納しておくデータ名のことです。defun関数と違う点は変数なので新たな関数に組み込むことができます。
****
(setq ten 10)
; [1]> ten
; 10
(defun add () (+ ten 3))
; [2]> (add)
; 13
****
関数名を定義しない関数を定義しよう
関数名を定義しないその場限りの関数も定義することができます。
"((lambda (仮引数1 仮引数2 ...) 仮引数を含む手続き) 実引数1 実引数2 ...)"
****
((lambda (x) (* x x x x)) 3)
; 81
((lambda (x y) (- x y)) 5 2)
; 3
****
lamda関数に類似の関数としてlet関数と呼ばれるものがあります。2つの関数の違いとしてlet関数はdefun関数に組み込むことができます。
"(let ((仮引数1 実引数1) (仮引数2 実引数2) ...) 仮引数を含む手続き)"
****
(defun sum ()
(let ((tmp1 5)
(tmp2 3))
(+ tmp1 (+ tmp1 tmp2))))
; [1]> (sum)
; 13
****
演習
文字列chou-programmingを引数なしの関数kansuu1と定義し、kansuu1を評価せよ。
kansuu1を使って文字列chou-programmingを返すkansuu2を定義し、評価せよ。
演習解答
****
(defun kansuu1 () 'chou-programming)
; [1]> (kansuu1)
; CHOU-PROGRAMMING
(defun kansuu2 () (kansuu1))
; [2]> (kansuu2)
; CHOU-PROGRAMMING
****
[0回]
PR
prev>>Lispの演算| HOME |next>>Lispの文字出力