« プログラミングを始めるには(30) | Main | プログラミングを始めるには(32) »

August 26, 2014

プログラミングを始めるには(31)

ここらでそろそろlambdaのことを書いておく必要があると思う。lispを始めたばかりの人はlambdaをすぐには理解出來ないだろうし、別にそれを知らなくてもプログラム書けてるし...と思うかもしれない。たしかに簡單な編集コマンドを書いているうちは必要ないであろう。

(defun my-plus-func (a b) (+ a b))
=>my-plus-func

(my-plus-func 1 2)
=>3

(symbol-function 'my-plus-func)
=>(lambda (a b) (+ a b))

;--------

(lambda (a b) (+ a b))
=>(lambda (a b) (+ a b))

((lambda (a b) (+ a b)) 1 2)
=>3

;--------

(關數名 パラメータ)
==
(lambda式 パラメータ)

おそらく上記の内容で、さらに上記の式を實際に實行してみて、それでも理解出來ない人は、私と同樣にちょっと時閒がかかるかもしれない。既にlambda式は何度か出てきているが、ほとんどヤケクソ的に使っていることが多かったので、ここらで眞っ當なケースを擧げてみる。

;;; lambda式を使用する眞っ當なケース

(sort '((1 . 2) (2 . 3) (3 . 4) (4 . 1))
      '(lambda (a b)
	 (< (cdr a) (cdr b))))
=>((4 . 1) (1 . 2) (2 . 3) (3 . 4))
==
(defun my-cdr< (a b)
  (< (cdr a) (cdr b)))
=>my-cdr<

(sort '((1 . 2) (2 . 3) (3 . 4) (4 . 1)) 'my-cdr<)
=>((4 . 1) (1 . 2) (2 . 3) (3 . 4))

;--------

(mapcar '(lambda (a)
	   (let ((string (char-to-string a)))
	     (cond ((= ?1 a) (concat string "st"))
		   ((= ?2 a) (concat string "nd"))
		   ((= ?3 a) (concat string "rd"))
		   (t        (concat string "th")))))
	"123456789")
=>("1st" "2nd" "3rd" "4th" "5th" "6th" "7th" "8th" "9th")
==
(defun my-number-string (a)
  (let ((string (char-to-string a)))
    (cond ((= ?1 a) (concat string "st"))
	  ((= ?2 a) (concat string "nd"))
	  ((= ?3 a) (concat string "rd"))
	  (t        (concat string "th")))))
=>my-number-string

(mapcar 'my-number-string "123456789")
=>("1st" "2nd" "3rd" "4th" "5th" "6th" "7th" "8th" "9th")

では、lambdaに對する違和感が取れた?ところで、次囘はarglistinteractiveの關係について述べることとする。

|

« プログラミングを始めるには(30) | Main | プログラミングを始めるには(32) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/74224/60211045

Listed below are links to weblogs that reference プログラミングを始めるには(31):

« プログラミングを始めるには(30) | Main | プログラミングを始めるには(32) »