Рекурсивные лямбды в F#

Это устанавливается в соответствии со стандартом кодирования максимум 80 символов на строку. Вы можете увеличить это из Tools-> Options. Редактор. Правое поле. Если вы не хотите его видеть, просто установите значение больше размера вашего экрана;)

7
задан duplode 15 July 2019 в 04:59
поделиться

2 ответа

Да, это возможно с использованием так называемых y-комбинаторов (или комбинаторы с фиксированной точкой ). Пример:

let rec fix f x = f (fix f) x

let fact f = function
 | 0 -> 1
 | x -> x * f (x-1)


let _ = (fix fact) 5 (* evaluates to "120" *)

Я не знаю статей по F #, но эта запись haskell также может быть полезна.

Но: Я бы не стал их использовать, если есть альтернатива - они довольно сложные чтобы понять.

Ваш код (опустите здесь аннотации типов) является стандартной конструкцией и гораздо более выразительной.

let listToString lst =

    let rec loop acc = function
        | []    -> acc
        | x::xs -> loop (acc ^ (string x)) xs

    loop "" lst
17
ответ дан 6 December 2019 в 10:53
поделиться

Обратите внимание, что, хотя вы говорите, что используете функцию только один раз, технически вы обращаетесь к ней по имени дважды, поэтому имеет смысл дать ей имя.

1
ответ дан 6 December 2019 в 10:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: