Вы можете превратить ответ @ ChadGilbert в однострочник (если не возражаете, что он немного длинный):
let isTable l = 1 = l |> List.map List.length |> List.distinct |> List.length
Коротко и мило, вы можете сразу увидеть, что происходит, ноне настолько эффективен, насколько это возможно, потому что он повторяет список дважды.На всякий случай, если вам нужно более эффективное решение, я предложил следующее:
let isTable = function
| [] -> true
| h :: t ->
List.length t = 0 ||
List.forall (fun l -> List.length h = List.length l) t
Сначала проверяется, пуст ли список (и я определил этот случай как таблицу, но не стесняйтесьвозвратите false
там вместо этого), и если нет, это работает на хвосте.Если он пуст, список имеет один элемент и, таким образом, тривиально является таблицей;в противном случае убедитесь, что все списки имеют одинаковую длину с первым списком.