Получение пустого значения в генераторе F#

У меня проблема с этим кодом, я попытался сгенерировать список непустой строки следующим образом:

let! x = Arb.generate<string> |> Gen.filter(fun (x) -> x<>null && x <>""&& x<>" ")|>Gen.nonEmptyListOf 

после запуска моего кода я получаю этот вывод:

val it : string list [] =
  [|["""; ")"; ":}E"; "B"; "!"; "v"; "re"; "Dv-"; ""; "";
     "eALyb|>Jn %;a="v`m:<="; ""; ""; ""]|]

как вы видите мой код генерирует пустую строку!

Пожалуйста, не могли бы вы сказать мне, как я могу решить эту проблему?

1 ответ

Решение

Я думаю, что результат, который вы получите, на самом деле не содержит пустую строку, но вместо этого содержит строку с невидимым символом.

Чтобы проверить это, вы можете попробовать выполнить следующее:

let gen = 
  Arb.generate<string> 
  |> Gen.filter(fun (x) -> x<>null && x <>""&& x<>" ")|>Gen.nonEmptyListOf 
let res = Gen.eval 1000 (Random.mkStdGen(42L)) gen

С помощью 42 в качестве моего семени я получаю строковое значение со смещением 80, которое отображается как "", но на самом деле это невидимый персонаж. Вот интерактивная сессия F#:

> res.[80];;
val it : string = ""

> res.[80].ToCharArray();;
val it : char [] = [|'\014'|]
Другие вопросы по тегам