Понимание списка в F#
Я пытаюсь сделать некоторое понимание списка в F#. И я нашел это.
let evens n =
{ for x in 1 .. n when x % 2 = 0 -> x }
print_any (evens 10)
let squarePoints n =
{ for x in 1 .. n
for y in 1 .. n -> x,y }
print_any (squarePoints 3)
Первый все еще работает нормально, но второй устарел. Последний (1.9.7.8) F# компилятор не поддерживает этот стиль.
После некоторого поиска я нашел это работает
let vec1 = [1;2;3]
let vec2 = [4;5;6]
let products = [for x in vec1 do for y in vec2 do yield x*y]
Может кто-то указать, почему изменился синтаксис? Благодарю.
1 ответ
Для вложенных циклов требуется
do
,Вам нужно использовать
seq {..}
, Форма{..}
безseq
больше не работаетwhen
охранник вfor
Шаблон петли также больше не поддерживается.print_any something
устарела. использованиеprintf "%A" something
вместо.
Этот код должен работать:
let evens n =
seq { for x in 1 .. n do if x%2=0 then yield x }
printf "%A" (evens 10)
let squarePoints n =
seq { for x in 1 .. n do
for y in 1 .. n -> x,y }
printf "%A" (squarePoints 3)
Вы все еще можете использовать ->
если все, что вы хотите сделать, это вернуть единственное значение:
let vec1 = [1;2;3]
let vec2 = [4;5;6]
let products = [for x in vec1 do for y in vec2 -> x*y]
Кстати, мне интересно наблюдать, как F# эволюционировал со временем. Жаль, что ранние последователи частично устарели на своих полках (не то, чтобы я возражал).