2009-10-02 31 views
9

Tuyên bố từ chối trách nhiệm:Tổng số F # Câu hỏi mới!F # - Hiển thị kết quả đầy đủ trong cửa sổ tương tác F #

Nếu tôi gõ như sau vào một chiếc F # tập tin trong Visual Studio

#light 

let squares = 
    seq { for x in 1 .. 10 -> x * x } 

printf "%A" squares 

và chạy F # tương tác trên nó bằng cách làm nổi bật và nhấn Alt + Nhập, đầu ra trong cửa sổ tương tác là

> 
seq [1; 4; 9; 16; ...] 
val squares : seq<int> 

> 

Nhưng tôi muốn xem toàn bộ chuỗi tức là

> 
seq [1; 4; 9; 16; 25; 36; 49; 64; 81; 100] 
val squares : seq<int> 

> 

Điều này có thể không? Tôi hy vọng rằng có một thiết lập cho điều này mà tôi đã bỏ lỡ.

Trả lời

9

'seq' là cấu trúc được đánh giá lười biếng; nó có thể là vô hạn, đó là lý do tại sao FSI chỉ hiển thị một vài giá trị đầu tiên. Nếu bạn muốn xem tất cả, điều dễ làm là chuyển đổi thành danh sách, ví dụ:

printf "%A" (squares |> Seq.tolist) 
+0

Cảm ơn Brian, hiện giờ đã có ý nghĩa hoàn toàn. Có thể yêu cầu FSI đánh giá tất cả các giá trị trong phạm vi hiểu seq (nếu đó là thuật ngữ chính xác) không? –

+5

@Russ, đó là hiệu quả những gì biến nó thành một Danh sách sẽ làm ... Nếu không, bạn phải làm Seq.iter (printfn "% A") hình vuông – Benjol

+0

Tôi nhận thấy printfn "% A" [1 .. 2000] chỉ hiển thị 100 giá trị đầu tiên. Giải pháp của Benjol sẽ in toàn bộ danh sách. – Juliet

9

Nếu bạn muốn hiển thị tất cả các giá trị trong chuỗi mà không cần chuyển vào một danh sách, bạn có thể lặp trực tiếp trên trình tự như sau:

Seq.iter (printfn "%A") squares 

Lưu ý rằng bạn đang tham gia một rủi ro: nếu, như Brian gợi ý, trình tự là vô hạn, bạn có thể chờ đợi khá lâu. (Trong trường hợp này, Seq.skipSeq.take là bạn của bạn)

+0

Trên một lưu ý có liên quan, giải pháp 'iter' này cũng hoạt động khi in toàn bộ mảng lớn sang giao diện điều khiển, tức là Array.iter (printfn "% A") –

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