Это прямой перевод вашего кода C #:
let contains value (ls: _ list list) =
let mutable found = false
for row in ls do
if not found then
for el in row do
if not found && el = value then
found <- true
found
Чтобы изменить значение переменной в F #, вы должны использовать ключевые слова mutable
или ref
. Тем не менее, в F # делать функциональным образом:
let contains value ls =
ls |> List.exists (List.exists ((=) value))
В отличие от for .. in ... do
, который является синтаксическим сахаром, функция высшего порядка List.exists
немедленно остановится, когда найдет ответ. Эта версия плохо масштабируется, если ваши списки большие. Вы можете преобразовать список в набор, чтобы быстрее находить элемент:
let contains value (ls: _ list list) =
ls |> List.concat |> Set.ofList |> Set.contains value