2016-10-16 2 views
2

Привет, есть ли способ решить продолжающиеся дроби в f # с помощью seq, а не списка?Продолжение фракций в f # с использованием seq

let cfToScalar cf = List.foldBack (fun elem acc -> float elem + (1.0/float acc)) cf System.Double.MaxValue 

коснуться как это, но я хочу, чтобы использовать вместо SEQ списков

+9

Просто смените List.foldback на Seq.foldBack – Ringil

+3

Не ожидайте наличия «бесконечного seq» таким образом; 'foldBack' требует полного прохождения контейнера сначала (текущая [реализация] (https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/seq.fs#L1227) преобразует последовательность в массиве внутри) – Sehnsucht

ответ

2

Как я уже сказал в своем комментарии, вы можете просто изменить List.foldback к Seq.foldback и ваша функция теперь будет принимать последовательности. Также обратите внимание на то, что Sehnsucht сказал, что текущая реализация foldback требует преобразования в массив, поэтому вход, который является бесконечной последовательностью, не будет работать.

На стороне примечания, поскольку F# 4.0's normalization of the collection modules заменяет один модуль для другого, в общем, теперь возможен с большинством функций в модулях List/Array/Seq.

Смежные вопросы