PL λαβ

Lab 1.1[최준혁]: Data 만들기 본문

kos

Lab 1.1[최준혁]: Data 만들기

junhyeokk 2021. 4. 6. 20:32

union을 대체하기 위해 Python의 dictionary 타입을 사용하여 나머지 매서드와 함수들을 구현하였습니다.

from enum import Enum

class Type(Enum):
    NIL = 0
    INT = 1
    PAIR = 2
    SYMBOL = 3

class Data:
    def __init__(self, type=Type.NIL, pair=(0, 0), symbol="", integer=0):
        self.type = type
        self.value = {"pair" : pair, "symbol" : symbol, "integer" : integer}
    def car(self):
        return self.value["pair"][0]
    def cdr(self):
        return self.value["pair"][1]
    def __str__(self):
        return f"Data type : {self.type}, Data value : {self.value}"

def nilp(d):
    return d.type == Type.NIL
    
def cons(d1, d2):
    return Data(Type.PAIR, pair=(d1, d2))

def mkint(n):
    return Data(Type.INT, integer=n)

def make_sym(s):
    return Data(Type.SYMBOL, symbol=s)

def print_expr(d):
    if d.type == Type.NIL:
        print("NIL")
    elif d.type == Type.PAIR:
        print(d.value["pair"])
    elif d.type == Type.SYMBOL:
        print(d.value["symbol"])
    elif d.type == Type.INT:
        print(d.value["integer"])

if __name__ == "__main__":
    print(cons(10, 11))
    print_expr(cons(1, 2))
    print_expr(mkint(3))
    print_expr(make_sym("Hello"))

 

 

 

'kos' 카테고리의 다른 글

Lab 1.2: 구문 분석기  (0) 2021.04.08
Lab 1.1[박인철]: Data 만들기  (0) 2021.04.06
Lab 1.1[김예령]: Data 만들기  (0) 2021.04.06
Lab 1.1: Data 만들기  (0) 2021.04.06
Scheme 구현 팀블로그에 오신 것을 환영합니다.  (0) 2021.04.05
Comments