jweinst1
10/23/2016 - 6:58 PM

list for functional programming language

list for functional programming language

//main value type for Oblivion language
enum OblLst {
    
    case int(Int)
    case str(String)
    case bool(Bool)
    indirect case lst([OblLst])
    case null
    
    //integer initializer
    init(val:Int) {
        self = .int(val)
    }
    
    //string initializer
    init(val:String){
        self = .str(val)
    }
    
    //bool initializer
    init(val:Bool){
        self = .bool(val)
    }
    
    subscript (index:OblLst) -> OblLst {
        get {
            switch index {
            case .int(let i):
                switch self {
                case .lst(let list):
                    if i > 0 && i < list.count {
                        return list[i]
                    }
                    else {
                        return OblLst.null
                    }
                default:
                    return OblLst.null
                }
            default:
                return OblLst.null
            }
        }
    }
}