递归思想求列表长度
oldbirds 3/31/2021 swift函数式编程
在 haskell 中,列表的长度是这么计算的:
length [] = 0
length [_] = 1
length (x:xs) = 1 + length xs
那么如何将这个思想在 swift 中表达:
extension Array {
var recuse:(x: Element?, xs: [Element]?) {
if let head = self.first {
return (head, self.dropFirst().map { $0 })
}
return (nil, nil)
}
}
func length<T>(list: [T]?) -> Int {
if let arr = list {
let (x, xs) = arr.recuse
if x == nil { return 0 }
if xs == nil {return 1 }
return 1 + length(list: xs)
} else {
return 0
}
}