2017-07-06 12 views
8

tôi đang học F # vào lúc này nhưng tôi có một thời gian khó khăn để hiểu điều này:F # yield! (Yieldbang) điều hành

let allPrimes = 
let rec allPrimes' n = 
    seq { 
     if isPrime n then 
      yield n 
     yield! allPrimes' (n + 1) } 
allPrimes' 2 

tôi không thể tìm ra những gì các nhà điều hành yield! chính xác không mặc dù tôi đã đọc ví dụ đơn giản khác và có vẻ như yield! trả về một chuỗi bên trong.

Trả lời

9

Toán tử bang yield kết hợp chuỗi phụ được tạo bởi các biểu thức trình tự được gọi vào chuỗi cuối cùng. Hoặc theo những từ đơn giản hơn: nó "làm phẳng" chuỗi được trả về để bao gồm các phần tử của chuỗi phụ trong chuỗi cuối cùng.

Ví dụ của bạn: Nếu không có sự điều hành năng suất nổ bạn sẽ nhận được một cái gì đó giống như

{ prime1 { prime2 { prime3 .... }}} 

với các nhà điều hành sản lượng nổ bạn nhận được

{ prime1 prime2 prime3 ... } 

nơi mỗi { biểu thị một chuỗi mới. Nút bên: Kết quả thực tế từ ví dụ đầu tiên của tôi thậm chí sẽ bao gồm nhiều trình tự hơn, vì nó sẽ trả về các chuỗi chỉ chứa các chuỗi vì thủ tố chỉ trả về nếu n is prime.

Các vấn đề liên quan