このリストをブール値に減らす方法を探しています。これがオリジナルです:
let ones = [1;1;1;1]
let twos = [2;2;2;2]
let bad = [1;2;3]
let isAllOnes = List.forall (fun op -> op = 1)
let isAllTwos = List.forall (fun op -> op = 2)
let isOneOrTwo ops = isAllOnes ops || isAllTwos ops
isOneOrTwo ones |> should be True
isOneOrTwo twos |> should be True
isOneOrTwo bad |> should be False
一種のreduceを使用してこれをリファクタリングしようとしています。このようなもの:
let isOneOrTwo ops = [isAllOnes; isAllTwos] |> List.tryFind (fun acc -> acc ops)
(isOneOrTwo ones).IsSome |> should be True
(isOneOrTwo twos).IsSome |> should be True
(isOneOrTwo bad).IsSome |> should be False
isOneOrTwoがオプションに還元される方法が好きではありません。私のアサーションが次のようになるように、リストをブール値に減らしたいと思います。
isOneOrTwo ones |> should be True
isOneOrTwo twos |> should be True
isOneOrTwo bad |> should be False
誰もがこれを実現する方法を知っていますか?タイプが異なるため、List.reduceは機能しませんでした。