我正在编写一个转置递归函数,但我遇到了一个问题。所以我想通过调用 isTable 函数来使用 match 进行检查,以验证输入 M 是一个有效的表,但是它出错了,我不确定如何修复它
let isTable list =
match List.map List.length list |> List.distinct |> List.length with
| 1 -> true
| _ -> false
let rec transpose M =
match M with
| []::_ -> []
| (isTable M) -> [] // i want to check here if M is a valid table
| _ -> (List.map List.head M::transpose(List.map List.tail M))
错误 FS0039:未定义模式鉴别器“isTable”。
最佳答案
事件模式是一种方法,但为单次使用添加一个模式的开销是不值得的。一个简单而整洁的解决方案是使用 when 子句:
let rec transpose M =
match M with
| []::_ -> []
| _ when isTable M -> []
| _ -> (List.map List.head M::transpose(List.map List.tail M))
关于list - F# 匹配模式鉴别器未定义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64195784/