$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ansi_common_lispが読めるようになりたい2 #TechLunch
Search
Livesense Inc.
PRO
April 23, 2014
Technology
0
62
ansi_common_lispが読めるようになりたい2 #TechLunch
2011/10/26(水) @ Livesense TechLunch
発表者:春日 太志
Livesense Inc.
PRO
April 23, 2014
Tweet
Share
More Decks by Livesense Inc.
See All by Livesense Inc.
27新卒_総合職採用_会社説明資料
livesense
PRO
0
1.3k
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
5k
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
130
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
0
1.6k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
510
26新卒_総合職採用_会社説明資料
livesense
PRO
0
12k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
2
47k
26新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
1
13k
中途セールス職_会社説明資料
livesense
PRO
0
280
Other Decks in Technology
See All in Technology
AI活用によるPRレビュー改善の歩み ― 社内全体に広がる学びと実践
lycorptech_jp
PRO
1
180
AWS re:Invent 2025で見たGrafana最新機能の紹介
hamadakoji
0
130
Oracle Technology Night #95 GoldenGate 26ai の実装に迫る1
oracle4engineer
PRO
0
150
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
210
学習データって増やせばいいんですか?
ftakahashi
1
240
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
280
ブロックテーマとこれからの WordPress サイト制作 / Toyama WordPress Meetup Vol.81
torounit
0
490
モダンデータスタック (MDS) の話とデータ分析が起こすビジネス変革
sutotakeshi
0
430
大企業でもできる!ボトムアップで拡大させるプラットフォームの作り方
findy_eventslides
1
560
生成AI・AIエージェント時代、データサイエンティストは何をする人なのか?そして、今学生であるあなたは何を学ぶべきか?
kuri8ive
2
2.1k
regrowth_tokyo_2025_securityagent
hiashisan
0
170
Edge AI Performance on Zephyr Pico vs. Pico 2
iotengineer22
0
110
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Faster Mobile Websites
deanohume
310
31k
Bash Introduction
62gerente
615
210k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Optimizing for Happiness
mojombo
379
70k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Automating Front-end Workflow
addyosmani
1371
200k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
@bar_̲row 2011年年10⽉月19⽇日 Livesense Inc. 1
⽬目次 Livesense Inc. 2 1. 関数 2. ⼊入出⼒力力 3. 変数
4. 代⼊入 5. 反復復 6. リスト
1-‐‑‒1. 関数(関数の定義) Livesense Inc. 3 > (defun my-third (x)) (car
(cdr (cdr x))) MY-THIRD > (my-third ’(a b c d)) C Ø 関数の定義は defun オペレータを使う Ø defun の引数は通常「関数名」「引数リスト」「関数本体」 Ø リストの指定要素を取得するアクセス関数オペレータ nth, first – tenth, cxr
1-‐‑‒2. 関数(関数オブジェクト) Livesense Inc. 4 > (function +) #<compiled-function +>
> #’+ #<compiled-function +> Ø function オペレータで関数オブジェクトを得る Ø quote と同様に #ʼ’ のエイリアスがある
1-‐‑‒3. 関数(call, apply, map) Livesense Inc. 5 > (apply #’+
1 2 ’(3 4 5)) 15 > (funcall #’* 1 2 3 5) 30 > (mapcar #’(lambda (x) (* x 2)) ’(1 2 3)) (2 4 6) Ø apply はパラメータの最後がリストである必要がある Ø funcall はパラメータがリストでなくてよい Ø リストの各要素に関数を適⽤用するオペレータは何個かある
1-‐‑‒4. 関数(無名関数) Livesense Inc. 6 > (lambda (x y) (+
x y) (LAMBDA-CLOSURE () () () (X y) (+ X Y)) > ((lambda (x y) (+ x y)) 1 2) 3 > (funcall #’(lambda (x y) (+ x y)) 1 2) 3 Ø lambda はオペレータではなくシンボル、古い Lisp の名残 Ø 即時実⾏行行できるし、#ʼ’ で関数オブジェクトを得られる
2. ⼊入出⼒力力 Livesense Inc. 7 > (format t“~A plus ~A
equals ~A.~%”2 3 (+ 2 3)) 2 plus 3 equals 5. NIL > (read) > a A Ø format は「出⼒力力場所」「書式」「挿⼊入値」を受け取る Ø read は構⽂文解析して得られた Lisp オブジェクトを返す
3. 変数 Livesense Inc. 8 > (let ((x 1) (y
2)) (+ x y) 3 > (defparameter *age* 27) *AGE* > (defconstant limit 35) LIMIT Ø 変数定義は局所変数は let、⼤大域変数は defparameter を使う Ø ⼤大域変数名の前後のアスタリスクは慣習 Ø 局所変数で初期化した変数は let の本体内でのみ使⽤用可能 Ø ⼤大域定数で使われたシンボルを変数名として使うとエラー
4. 代⼊入 Livesense Inc. 9 > (setf *age* 28) 28
> (let ((n 10)) (setf n 2) n) 2 > (setf a 1 b 2) 2 > (setf (car ’(1 2 3)) 4) (4 2 3) Ø 変数への代⼊入には setf Ø ⼀一般化参照 Ø setf の第⼀一引数が局所変数 でない場合は⼤大域変数と みなされる
5-‐‑‒1. 反復復 Livesense Inc. 10 > (do ((i 0 (+
i 1))) ((> i 5) ’done) (format t“~A~%”i)) 0 1 2 3 4 5 DONE Ø (変数 初期値 更更新式) Ø (終了了判定式 終了了後実⾏行行式) Ø (本体式)
5-‐‑‒2. 反復復(dolist) Livesense Inc. 11 > (let ((len 0)) (dolist
(elem ’(a b c d e)) (setf len (+ len 1))) len) 5 Ø リストの反復復処理理を⾏行行うのであれば dolist が便便利利
6-‐‑‒1. リスト(proper list) Livesense Inc. 12 Ø コンス(コンスセル)は概念念的には⼀一対のポインタ Ø 第⼀一ポインタは
car 部を、第⼆二ポインタは cdr 部を指す Ø コンスだけからなるリストは真リストと呼ばれる nil a (A) (list ’a)
6-‐‑‒2. リスト(proper list) Livesense Inc. 13 nil a b c
(A B C) (list ’a ’b ’c)
6-‐‑‒3. リスト(proper list) Livesense Inc. 14 nil a b d
(A (B C) D) c (list ’a ’(b c) ’d) nil
6-‐‑‒4. リスト(dotted list) Livesense Inc. 15 Ø 真リストでないコンスはドットリストと呼ばれる Ø ’(a
b c) は ’(a . (b . (c . nil))) と書いても同じ nil a (A) (cons ’a nil) a (A . B) (cons ’a ’b) b
6-‐‑‒5. リスト(assoc list) Livesense Inc. 16 Ø ドットリストで連想リストが⽣生成できる Ø assoc
オペレータで指定キーのドットリストを取得 Ø しかしパフォーマンスは低い > (setf hoge ’((+ .“add”) (- .“substract”)) ((+ .“add”) (- .“substract”)) > (cdr (assoc ’+ hoge)) “add” > (assoc ’* hoge) NIL
Livesense Inc. 17