2009-12-11 14 views
19

में सूची समझ में मैं एफ # में कुछ सूची समझने की कोशिश कर रहा हूं। और मुझे this मिला।एफ #

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) एफ # कंपाइलर इस शैली का समर्थन नहीं करता है।

कुछ खोज मैंने पाया यह काम करता है

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] 

के बाद कोई बात क्यों वाक्य विन्यास बदल सकते हैं? धन्यवाद।

उत्तर

20
  • लूप के लिए Nested do की आवश्यकता है।

  • आपको seq {..} का उपयोग करने की आवश्यकता है। {..}seq के बिना फॉर्म अब काम नहीं करता है।

  • 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] 

वैसे, मुझे लगता है यह देखना दिलचस्प है कि एफ # समय के साथ कैसे विकसित हुआ। शुरुआती गोद लेने वालों के बहुत बुरे आंशिक रूप से पुरानी किताबें हैं जो उनके अलमारियों पर हैं (मुझे नहीं लगता कि)।

+2

ठीक है, शुरुआती गोद लेने वालों के पास उस समय बहुत पसंद नहीं था :) – Benjol

+3

हमने न तो लेखकों को जल्दी ही अपनाना शुरू किया। ;-) –