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
}
}
}
}