list - F# 匹配模式鉴别器未定义问题

标签 list recursion error-handling f# pattern-matching

我正在编写一个转置递归函数,但我遇到了一个问题。所以我想通过调用 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/

相关文章:

python - python中的慢递归

Java 递归 System.out.println()

c++ - 迭代器错误值

php - Zend 框架 : Error Reporting is shut down regardless of ini File

ios - 初始化前使用的常量 'error'

c++ - for_each for Node 手动 c++

Python 使用 if 语句对字典列表进行排序

c++ - 按顺序打印前缀树中的所有单词

list - 通过列表列表中的索引获取元素/元素的索引

python - 在Python中迭代嵌套列表