r3.dvi

Similar documents
Microsoft PowerPoint - 2-LispProgramming-full

( ) [2] H 4 4! H 4 4! (5 4 3 )= = Fortran C 0 #include <stdio.h> 1 #include

つくって学ぶプログラミング言語 RubyによるScheme処理系の実装

1. A0 A B A0 A : A1,...,A5 B : B1,...,B


連立1次方程式Ax=bの解法:公式にしたがって解くのは,計算量大

30

parser.y 3. node.rb 4. CD-ROM

Jacques Garrigue

Z...QXD (Page 1)

離散数理工学 第 2回 数え上げの基礎:漸化式の立て方

VDM-SL VDM VDM-SL Toolbox VDM++ Toolbox 1 VDM-SL VDM++ Web bool

Emacs ML let start ::= exp (1) exp ::= (2) fn id exp (3) ::= (4) (5) ::= id (6) const (7) (exp) (8) let val id = exp in

haskell.gby

untitled

1

log1-500

平成27年度三菱重工グループ保険 フルガードくん(シニア)

A

2

N88 BASIC 0.3 C: My Documents 0.6: 0.3: (R) (G) : enterreturn : (F) BA- SIC.bas 0.8: (V) 0.9: 0.5:

Microsoft PowerPoint - IntroAlgDs-05-2.ppt

1

PL : pl0 ( ) 1 SableCC ( sablecc ) 1.1 sablecc sablecc Étienne Gagnon [1] Java sablecc sablecc ( ) Visitor DepthFirstAdapter 1 (Depth

Microsoft PowerPoint - IntroAlgDs pptx

r1.dvi

ML Edinburgh LCF ML Curry-Howard ML ( ) ( ) ( ) ( ) 1

日本内科学会雑誌第102巻第10号

第10回 コーディングと統合(WWW用).PDF

Lesson 1 1 EXVBA2000 Lesson01 Lesson01.xls 2

Parametric Polymorphism

lifedesign_contest_No3


2


Microsoft PowerPoint - IntroAlgDs pptx

Pascal Pascal Free Pascal CPad for Pascal Microsoft Windows OS Pascal

ex01.dvi

# let st1 = {name = "Taro Yamada"; id = };; val st1 : student = {name="taro Yamada"; id=123456} { 1 = 1 ;...; n = n } # let string_of_student {n

C言語によるアルゴリズムとデータ構造

yacc.dvi

1.ppt

ex01.dvi

コンピュータ概論

num2.dvi

11042 計算機言語7回目 サポートページ:

FIVA取扱説明書

: Shift-Return evaluate 2.3 Sage? Shift-Return abs 2 abs? 2: abs 3: fac

fp.gby

導入基礎演習.ppt

(1) (2) (3) (4) (1) (a) (b) (c) (d) kg 9.8 N 5.0 kg 19.6 m/s kg m/s 8.0kg (2) 1 r=1.0m ABC QA =1

r07.dvi

ohp07.dvi

Excel ではじめる数値解析 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行時のものです.

compiler-text.dvi


: : : TSTank 2

Transcription:

2012 3 / Lisp(2) 2012.4.19 1 Lisp 1.1 Lisp Lisp (1) (setq) (2) (3) setq defun (defun (... &aux...)...) ( ) ( nil ) [1]> (defun sisoku (x y &aux wa sa sho seki) (setq wa (+ x y)) (setq sa (- x y)) (setq sho (/ x y)) (setq seki (* x y)) (list wa sa sho seki)) SISOKU [2]> (sisoku 2 3) (5-1 2/3 6) loop (loop...) (return ) ( nil) [1]> (defun power (x n &aux result) (setq result 1) (loop (if (< n 1) (return result)) 1

(setq result (* x result)) (setq n (- n 1)))) POWER [2]> (power 2 3) 8 5 listlen? (read) --- S (print ) --- print >(print (a b c)) (A B C) print (A B C) print 6 2 0 jijouloop C Java?? 1.2 listsum? (+ 1 2 3 4) (1 2 3 4) + apply (apply ) CommonLisp (function ) ;;; # (function (lambda ( ) ) ;;; # (lambda...) [1]> (apply # + (1 2 3 4)) 10 funcall (funcall ) [1]> (funcall # + 1 2 3 4) 10 2

1.3 let &aux setq let ( ) (let (( 1 1) ( 2 2) ) ) let lambda let (funcall # (lambda ( 1 2 ) ) 1 2 ) 1.4 mapcar f (x 1 x 2 x n ) f mapcar (mapcar ) [1]> (mapcar # (lambda (x) (cons x x)) (a b c d)) ((A. A) (B. B) (C. C) (D. D)) 10 mapcar ( )xmapcar 11 mapcar a. addlist : (addlist 3 (1 2 3)) (4 5 6) b. listsum2 mapcar ( : setq ) 1.5 : ( Lisp S ) + * 2 (defun diff (exp var) (cond ((null exp) nil) ((numberp exp) 0) ((symbolp exp) (if (eq exp var) 1 0)) ((eq (car exp) +) (cons + (mapcar # (lambda (x) (diff x var)) (cdr exp)))) ((eq (car exp) *) (list + (list * (diff (cadr exp) var) (caddr exp)) (list * (cadr exp) (diff (caddr exp) var)))))) 3

0 1 0 2 (fg) = f g + fg [1]> (diff (+ (* x x) (* 2 x) 1) x) (+ (+ (* 1 X) (* X 1)) (+ (* 0 X) (* 2 1)) 0) [2]> (diff (* (* x x) (* x x)) x) (+ (* (+ (* 1 X) (* X 1)) (* X X)) (* (* X X) (+ (* 1 X) (* X 1)))) 1.6 eval eval Lisp > x x eval > (eval x) (x ) > x 7 (setq ) valuelist 2 Lisp 2.1 Lisp CLisp > S (defun xtoplevel (&aux e) (loop (princ "? ") (setq e (read)) (cond ((eq e end) (return)) (t (print (eval e)) (terpri))))) 4

? S end ( ) >(xtoplevel)? (cons a b) (A. B)? (list a b c d e) (A B C D E)? end NIL > Lisp? 2.2 eval eval Lisp eval xeval x 2.2.1 ((. ) (. )... (. )) Lisp ((X. A) (Y. 1) (Z A B C)) x a y 1 z? xassoc (defun xassoc (x l) (cond ((null l) nil) ((eq (caar l) x) (car l)) (t (xassoc x (cdr l))))) [1]> (setq l ((x. a) (y. 1) (z a b c))) ((X. A) (Y. 1) (Z A B C)) [2]> (xassoc x l) (X. A) [3]> (xassoc z l) (Z A B C) 5

xeval xeval ( eval ) (defun xeval (e a) (cond ((atom e) (cdr (xassoc e a))) (t error))) xeval S error xtoplevel eval (defun xtoplevel (&aux e) (loop (princ "? ") (setq e (read)) (cond ((eq e end) (return)) (t (print (xeval e *env*)) (terpri))))) *env* ( ) *...* Lisp [1]> (setq *env* ((x. a) (y. 1) (z a b c))) ((X. A) (Y. 1) (Z A B C)) [2]> (xtoplevel)? x A? z (A B C)...? t NIL? (quote a) ERROR t nil *env* (t. t) (nil. nil) 2.2.2 quote quote xeval (defun xeval (e a) (cond ((atom e) (cdr (xassoc e a))) ((atom (car e)) (cond ((eq (car e) quote) (cadr e)) (t error))) (t error))) 6

e quote... e cadr (quote ) [1]> (setq *env* ((x. a) (y. 1) (z a b c) (t. t) (nil. nil))) ((X. A) (Y. 1) (Z A B C) (T. T) (NIL)) [2]> (xtoplevel)? t T? x A? (quote x) X? (quote (a b c)) (A B C)? (a b c) (A B C)? end NIL >?? (quote...) 2.2.3 apply... apply xapply xeval (defun xeval (e a) (cond ((atom e) (cdr (xassoc e a))) ((atom (car e)) (cond ((eq (car e) quote) (cadr e)) (t (xapply (car e) (xevlis (cdr e) a) a)))) (t (xapply (car e) (xevlis (cdr e) a) a))))? 2 ( quote ) xevlis 7

(defun xevlis (l a) (cond ((null l) nil) (t (cons (xeval (car l) a) (xevlis (cdr l) a))))) > (xevlis (x z y) *env*) (A (A B C) 1)? xapply (defun xapply (f x a) (cond ((eq f car) (caar x)) ((eq f cdr) (cdar x)) ((eq f cons) (cons (car x) (cadr x))) ((eq f atom) (atom (car x))) ((eq f eq) (eq (car x) (cadr x))) (t error))) car x 1 ((car x)) car car car? S 5 >(xtoplevel)? (car (a b)) A? (cons x (y z)) (X Y Z)? (cons x (cons y (cons z nil))) (X Y Z)? (eq x x) T 2.2.4 lambda Lisp? lambda xpairlis (defun xpairlis (x y a) (cond ((null x) a) ((null y) a) (t (cons (cons (car x) (car y)) (xpairlis (cdr x) (cdr y) a))))) a 1 b 3... 8

[1]> (xpairlis (a b) (1 3) *env*) ((A. 1) (B. 3) (X. A) (Y. 1) (Z A B C) (T. T) (NIL)) xapply (defun xapply (f x a) (cond ((eq f car) (caar x)) ((eq f cdr) (cdar x)) ((eq f cons) (cons (car x) (cadr x))) ((eq f atom) (atom (car x))) ((eq f eq) (eq (car x) (cadr x))) ((atom f) error) ((eq (car f) lambda) (xeval (caddr f) (xpairlis (cadr f) x a))) (t error))) (lambda... (xapply (lambda (x) (cons x x)) (a)) (x. a) a y (cons x x)? [1]> (xtoplevel)? ((lambda (x) (cons (cons x nil) nil)) a) ((A)) 2.2.5 defun lambda? xapply (atom f) error ((atom f) (xapply (cdr (xassoc f a)) x a)) xapply xtoplevel defun! (defun xtoplevel (&aux e) (loop (princ "? ") (setq e (read)) (cond ((eq e end) (return)) ((and (listp e) (eq (car e) defun)) (setq *env* (cons (cons (cadr e) (cons lambda (cddr e))) *env*))) (t (print (xeval e *env*)) (terpri))))) 9

S defun ( lambda ) [1]> (xtoplevel)? (defun f (x y) (cons y x))? (f aa bb) (BB. AA) 2.2.6 cond? 1 cond! xeval quote cond (defun xeval (e a) (cond ((atom e) (cdr (xassoc e a))) ((atom (car e)) (cond ((eq (car e) quote) (cadr e)) ((eq (car e) cond) (xevcon (cdr e) a)) (t (xapply (car e) (xevlis (cdr e) a) a)))) (t (xapply (car e) (xevlis (cdr e) a) a)))) xevcon (defun xevcon (l a) (cond ((null l) nil) ((xeval (caar l) a) (xeval (cadar l) a)) (t (xevcon (cdr l) a))))... OK Lisp >(xtoplevel)? (defun g (l) (cond (l (cons (cons (car l) (car l)) (g (cdr l)))) (t nil)))? (g (a b c)) ((A. A) (B. B) (C. C))? end NIL 10

(null l) null xeval! Lisp? 8 Lisp ( 50 ) 9 CommonLisp Lisp A: if then else B: loop return loop (while ) C: cond D: E: defun setq 1 if loop print F: Lisp! 1 G: CommonLisp ( ) lambda Lisp (?) H: lambda if ( nlambda ) ndefun I: lambda + list 1 ( llambda ) ldefun J: 2 1 ( flambda ) fdefun K: ( mlambda ) defmacro (defmacro if (x y z) (list cond (list x y) (list t z))) (if (null l) a b) 1 setq (!) 2 (numberp ) 2 11

(cond ((null l) a) (t b))... if (!) 12