Почему рекурсивное значение равно нулю? - PullRequest
10 голосов
/ 29 апреля 2019

Я начинающий F #, у меня возникает эта проблема, когда я изучаю "рекурсивные значения".

type Type = 
    | N of int * Type
    | E

let rec a = N(2, b)
and b = N(3, E)

a |> printfn "%A"

Я ожидаю результат:

N(2, N(3, E))

, но фактический результат:

N (2,null)

output

1 Ответ

10 голосов
/ 29 апреля 2019

Это на самом деле ошибка в компиляторе F #, поданная здесь: https://github.com/fsharp/fsharp/issues/847

Не было никаких указаний о том, когда (или если) это будет исправлено.

Для вашего конкретногоНапример, я бы рекомендовал просто удалить модификатор rec: он не нужен, так как значения на самом деле не являются рекурсивными.Это устранит ошибку.

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

let a, b =
    let rec a = N(2, b)
    and b = N(3, E)
    a, b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...