Я пытаюсь перенести эту функцию haskell на F #
subs :: [a] -> [[a]]
subs [] = [[]]
subs (x:xs) = ys ++ map (x:) ys
where
ys = subs xs
пример
сабс [1,2,3]
возвращается:
[[], [3], [2], [2,3], [1], [1,3], [1,2], [1,2,3]]
возвращает все подпоследовательности списка, которые задаются всеми возможными комбинациями исключения или включения каждого элемента
....
У меня проблемы с оператором 'where', который рекурсивно генерирует другой список 'ys'.
Я также не уверен, что правильно перенести предикат '(x :)' на '(fun i -> i)'.
Это как раз то утверждение F #, которое я могу понять.
let rec subs list =
match list with
| [] -> [[]]
| x::xs -> List.map (fun i -> i) xs
Любая помощь или направление будет принята с благодарностью.