class LLInt {
static var zero: LLInt = LLInt(0)
let isPositive: Bool?
let prev: LLInt?
var value: Int {
guard let positive = isPositive, let previous = prev else {
return 0
}
if positive {
return 1 + previous.value
} else {
return -1 + previous.value
}
}
init(_ value:Int) {
if value == 0 {
prev = nil
isPositive = nil
} else if value > 0 {
prev = LLInt(value - 1)
isPositive = true
} else {
prev = LLInt(value + 1)
isPositive = false
}
}
}