第8章:抽象化機構 - Takeichi Lab

Download Report

Transcript 第8章:抽象化機構 - Takeichi Lab

第8章 抽象化機構


計算の抽象化と具体化
 パラメタによる抽象化の仕組み
 引数を与える具体化の仕組み
型も計算と同様に抽象化することが可能
引数機構

手続きによる抽象化・具体化機構
proc p(x) = ...
仮引数(formal parameter)
call p(a)
実引数(actual parameter)

抽象化パラメタの表わす計算対象



値
記憶域
計算処理
(a) 記憶場所
begin
var z;
proc inc(x) = x:=x+1;
z:=0; call inc(z); output z
end

call by reference
Pascalの手続きの宣言

procedure inc(var x:integer);
1
(b) 値
begin
var x,z;
proc sum(x) = while x>0 do
begin z := z+x; x:=x-1 end;
x:=1; z:=0;
call sum(x+3); output x; output z;
1, 10
end

Call by value
Pascalの手続きの宣言
procedure sum(x:integer);
(C) 閉包(遅延評価)
begin
var i, n, z;
proc sum(x) = while i<10 do
begin z:=z+x; i:=i+1 end;
n:=10; i:=0; z:=0; call sum(i); output z
end
45

Call by name (call by closure)
Ex. Haskell language
多様型関数:型の抽象化
function idInt (x : integer) : integer
begin idInt := x end
function idBool (x : Boolean) : Boolean
begin idBool := x end
多様型関数
function id (x : ) : 
begin id := x end
型変数
単一化機構 (unification)

パラメタを含む2つのデータ構造を同一のもの
にするようなパラメタの値を求めることを基本
的な計算機構とする抽象化の仕組み



x+1, 2+y
(x,y), (y,1)
x*y, y*x



x2, y1
xy, y1
xy
循環的な依
存関係なし
記号式:単一化対象
data U_Expr a b = U_Var a
| U_Struct b [U_Expr a b]
x+y  U_Struct “+”
[U_Var “x”,
U_Var “y”]
:: U_Expr String String
(a) 代入 Substitution
type Subst a b = [(a,U_Expr a b)]
null_Subst = []
single_Subst x e = [(x,e)]
comp_Subst p p’ = p ++ p'
apply_Subst p e = foldr subst e p
where
subst (x,e) e'@(U_Var x')
| x==x' = e
| otherwise = e'
subst q (U_Struct c es) =
U_Struct c (map (subst q) es)
(b) 単一化
unify :: U_Expr a b -> U_Expr a b -> [Subst a b]
unify (U_Var x) e'@(U_Var x')
| x==x' = [null_Subst]
| otherwise = [single_Subst x e']
unify (U_Var x) e'
| x `elem` u_vars e' = unify_failure
| otherwise = [single_Subst x e']
unify e (U_Var x')
| x' `elem` u_vars e = unify_failure
| otherwise = [single_Subst x' e]
unify (U_Struct c es) (U_Struct c' es')
| c==c' = unify_list es es'
| otherwise = unify_failure
例
f(X,g(X)), f(Z,g(a))

X,Z
 XZ

g(X),g(a)


g(Z), g(a)
Za
期末試験について

2月5日(月) 10:15-11:45
6号館63号室
教科書、参考書、ノート持込可

満点60点(ボーナス問題20点)

