Zauważyłem, że następujący kod daje błąd podczas próby go skompilować:Dlaczego seq computation builder nie pozwala na "let!"
let xx =
seq {
let! i = [ 1; 2 ]
let! j = [ 3; 4 ]
yield (i,j)
}
Błąd ten daje to "Błąd FS0795:«niech x = coll»Stosowanie w wyrażeniach sekwencji nie jest Dłuższe zezwolenie Zamiast tego użyj "dla x w coll" "Ta wiadomość jest oczywista i pokazuje, jak to naprawić; naprawiony kod będzie:
let xx =
seq {
for i in [ 1; 2 ] do
for j in [ 3; 4 ] do
yield (i,j)
}
Moje pytanie nie brzmi, jak to naprawić, ale dlaczego "niech!" nie jest dozwolone w wyrażeniach sekwencji w pierwszej kolejności? Widzę, jak to się stało! iteracje nad wyrażeniem mogą być dla niektórych zaskoczeniem, ale nie powinno to wystarczyć, aby nie pozwolić na konstrukt. Widzę też, jak "dla" jest tutaj potężniejsze, jako wersja z "niech!" piecze w zakresie iteracji jako "do końca wyrażenia sekwencji".
Jednak możliwość powtórzenia sekwencji bez wcięcia kodu była dokładnie tym, czego szukałem (do przechodzenia przez struktury drzewiaste). Zakładam, że aby uzyskać to semantyczne, będę musiał stworzyć nowy konstruktor wyrażeń, który działa głównie jak budowniczy wyrażeń "seq", ale pozwala na "niech!" do iteracji, prawda?
dodane, oparte na komentarz Briana poniżej, dostarczając rozwiązania mojego problemu: bazowego
Nie wiedziałem wcięcie w dla bloków nie jest potrzebna, a druga próbkę można ponownie zapisać jako:
let xx =
seq {
for i in [ 1; 2 ] do
for j in [ 3; 4 ] do
yield (i,j)
}
... który pozbywa się coraz nacięciu gdy przejeżdżające strukturę drzewa. Składnia pozwala nawet dodatkowych oświadczeń w między dla wypowiedzi bez konieczności dodatkowego wcięcia, jak w:
let yy =
seq {
for i in [ 1; 2 ] do
let i42 = i+42
for j in [ 3; 4 ] do
yield (i42,j)
}
Teraz, jeśli tylko mogę zrozumieć dlaczego myślałem, oświadczenia te wymagałyby wcięcia ...
Możliwe zamieszanie z 'let!' W powiązaniach asynchronicznych - mamy identyczną składnię, robiąc zupełnie różne rzeczy? –
Czy próbowałeś "forów bez wcięć? – Brian
@Brian "Czy próbowałeś" forów bez wcięć? " - nie, z jakiegoś powodu nie zdawałem sobie sprawy, że wcięcia w "forach" nie są potrzebne. Dzieki za sugestie! Ściśle mówiąc, nie odpowiada na pytanie, ale zapewnia akceptowalne podejście do pracy, więc w pewnym sensie odpowiada na moje pytanie. –