2012-03-19 12 views
8

एफ # List की शुरुआत में तत्व जोड़ने का बेहतर तरीका सूची के सामने एक आइटम जोड़ने के लिए cons (::) ऑपरेटर प्रदान करता है। क्या Seq के लिए ऐसा करने के लिए कोई फ़ंक्शन है? मेरे द्वारा आने वाला एकमात्र तरीका Seq.append का उपयोग निम्नानुसार कर रहा है। क्या ऐसा करने का एक और अधिक कुशल/सुरुचिपूर्ण तरीका है?एफ # अनुक्रम

> let myLst = [1..5] 
> 0::myLst;; 
val it : int list = [0; 1; 2; 3; 4; 5] 


> let mySeq = {1..5} 
> Seq.append (seq [0]) mySeq;; 
val it : seq<int> = seq [0; 1; 2; 3; ...] 

संभावित डुप्लिकेट, लेकिन वास्तव में मेरे प्रश्न का उत्तर नहीं दे रहा है।

[1] का उपयोग करता Seq.append

+3

ध्यान दें कि आप केवल 'Seq.append [0] mySeq' का उपयोग कर सकते हैं, आपको' seq' 'पर कॉल में' [0] 'लपेटना नहीं है। – kvb

उत्तर

8

ऊपर के रूप में यह याद करने के लिए है कि एफ # अनुक्रम एक गणना है मदद मिल सकती है वास्तव में। कोई फर्क नहीं पड़ता कि आप इसे कैसे प्राप्त करने जा रहे हैं, दिन के अंत में आपको एक नई गणना होनी चाहिए कि, यदि गणना की जा रही है, तो पहले संलग्न तत्व उत्पन्न करता है, और फिर पुराना अनुक्रम उत्पन्न करता है। सबसे सीधा रूप में इस a sequence expression का प्रयोग कर प्राप्त किया जा सकता है:

> let mySeq = {1..5} 
> seq { yield 0; yield! mySeq };; 
val it : seq<int> = seq [0; 1; 2; 3; ...] 

Seq.append पुस्तकालय समारोह शब्दार्थ एक ही कार्रवाई का सिर्फ एक अनुकूलित कार्यान्वयन है।

+0

जीन बेलित्सकी: धन्यवाद। तो क्या आप मूल रूप से 'Seq.append' का उपयोग करने का सुझाव दे रहे हैं क्योंकि इसे अनुकूलित किया गया है? – vis

+0

@vis: मुझे नहीं लगता कि एक सार्वभौमिक "एक-फिट-सब" सिफारिश समझ में आता है। उत्तर, सामान्य रूप से, "यह निर्भर करता है ..." होगा। फिर भी, जब आप अंतर्निहित सिद्धांतों को जानते हैं तो आप स्वयं को चुन सकते हैं। –