110 likes | 249 Views
컴퓨터의 기초 8 강 - Integer Node, Pair Node. 2006 년 5 월 15 일. 내가 만들 세상의 물건 / 값들을 표현하는 방법을 정하자. typedef enum {Pair, Int, Car, Energy} type; typedef struct {type tag;} obj;. tag. typedef struct {type tag; obj *fst; obj *snd;} pair;. fst. snd. typedef struct {type tag; int val;}
E N D
컴퓨터의 기초 8강- Integer Node, Pair Node 2006년 5월 15일
내가 만들 세상의 물건/값들을 표현하는 방법을 정하자 typedef enum {Pair, Int, Car, Energy} type; typedef struct {type tag;} obj; tag typedef struct {type tag; obj *fst; obj *snd;} pair; fst snd typedef struct {type tag; int val;} integer; tag val tag typedef struct {type tag;int yr;int cc;int km;} car; yr cc km
꼬리표있는 pair 만들기와 사용하기 pair *make_pair(obj *fst, obj* snd) { pair *n = (pair *)malloc(sizeof(pair)); n->fst = fst; n->snd = snd; n->tag = Pair; return n; } char *fst(pair *p) {return p->fst;} char *snd(pair *p) {return p->snd;} char *Nil = 0;
꼬리표있는 pair 만들기와 사용하기 pair *make_pair(obj *fst, obj* snd) { pair *p = (pair *)malloc(sizeof(pair)); p->fst = fst; p->snd = snd; p->tag = Pair; return p; } char *fst(pair *p) {return p->fst;} char *snd(pair *p) {return p->snd;} char *Nil = 0;
꼬리표있는 pair 만들기와 사용하기 pair *make_pair(obj *fst, obj* snd) { ... } char *fst(pair *p) {return p->fst;} char *snd(pair *p) {return p->snd;} char *Nil = 0; ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇp ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇPair ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ`1st ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ2nd
꼬리표있는 int 만들기와 사용하기 integer *make_int(int z) { integer *n = (integer *)malloc(sizeof(integer)); n->val = z; n->tag = Int; return n; } int int_val(integer *z) {return z->val;}
꼬리표있는 int 만들기와 사용하기 integer *make_int(int z) { integer *n = (integer *)malloc(sizeof(integer)); n->val = z; n->tag = Int; return n; } int int_val(integer *n) {return n->val;}
꼬리표있는 int 만들기와 사용하기 integer *make_int(int z) { ... } int int_val(integer *n) {return n->val;} ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇtag ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇval ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇn ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇInt ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇz
make_pair(make_int(1), make_pair(make_int(2),Nil)); make_pair(make_pair(make_int(1),Nil), make_pair(Nil,make_int(2))); int sum_pair(pair *p) { /* fst(p) = Nil or Int or Pair or Car or … */ /* snd(p) = Nil or Int or Pair or Car or … */ if (fst(p) == Nil && snd(p) == Nil) {…} else if (fst(p) == Nil && snd(p) != Nil) {…} … else if (fst(p)->tag == Int && snd(p)->tag == Int) {…} else if (fst(p)->tag == Pair && snd(p)->tag == Pair) {…} … • too many cases: • 모든 타입의 값/물건이 뒤섞일 수 있는 프로그램은 no • 타입별로 계산과 데이터의 세계가 나누어져야 • int list, car list, (int+car) list, • int tree, (car+animal) list
ㅡmake pair make_pair(make_pair(make_int(1),Nil), make_pair(Nil,make_int(2))); ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇPair ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ`1st ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ2nd ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇPair ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ1st ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ2nd ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇPair ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ1st ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ2nd ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇInt ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ1 ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇInt ㅑㅜㅅㅑㅇㄹㄴㅁㅇㅁㄴㅇㅁㄴㄹㄴㅁㅇㄹㄴㅇ2
7강 – List, List Node8강 - Integer Node, Pair Node Any Question?