2009-12-14 23 views
27

मैंने इस sample में कुछ कोड में देखा है जिसमें >> ऑपरेटर शामिल है:एफ # में >> ऑपरेटर का क्या मतलब है?

let printTree = 
    tree >> Seq.iter (Seq.fold (+) "" >> printfn "%s") 

>> ऑपरेटर का मतलब क्या है/क्या करता है?

बहुत बहुत धन्यवाद, अब यह बहुत स्पष्ट है। मेरा उदाहरण है कि मैंने इसे लटका पाने के लिए जेनरेट किया:

open System 
open System.IO 

let read_lines path = File.ReadAllLines(path) |> Array.to_list 

let trim line = (string line).Trim() 
let to_upper line = (string line).ToUpper() 

let new_list = [ for line in read_lines "myText.txt" -> line |> (trim >> to_upper) ] 

printf "%A" new_list 
+0

आप यहां तक ​​कि अब अधिक संक्षेप में रहें: ... new_list2 = read_lines "myText.txt" |> List.map (ट्रिम >> to_upper) ... यह वह रूप है जिसमें मैं डेटा प्रोसेसिंग लिखता हूं। – cfern

+0

बहुत बढ़िया है, इसलिए मैं इसे चालू कर सकता हूं: new_list2 = file.ReadAllLines (पथ) |> Array.map (ट्रिम >> to_upper) ... बहुत साफ :) धन्यवाद – Russell

+0

देखें, आप पहले ही सीख रहे हैं :) – cfern

उत्तर

55

यह फ़ंक्शन संरचना ऑपरेटर है।

Chris Smith's blogpost पर अधिक जानकारी।

let inline (>>) f g x = g(f x)

पढ़ता कौन सा रूप: दो कार्यों को देखते हुए च और जी, और एक मूल्य, एक्स, गणना की परिणाम

समारोह संरचना ऑपरेटर (>>) का परिचय एक्स का एफ और परिणाम जी को पास करें। दिलचस्प बात यह है कि है कि आप (>>) फ़ंक्शन को फ़्रीज़ कर सकते हैं और केवल पैरामीटर एफ और जी, में पास कर सकते हैं परिणाम एक ऐसा फ़ंक्शन है जो एकल पैरामीटर लेता है और परिणाम g (f (x)) बनाता है। ।

यहाँ छोटे से बाहर एक समारोह रचना की एक त्वरित उदाहरण है:

let negate x = x * -1 
let square x = x * x 
let print x = printfn "The number is: %d" x 
let square_negate_then_print = square >> negate >> print 
asserdo square_negate_then_print 2 

जब निष्पादित प्रिंट '-4'।

2

F# Symbol and Operator Reference के अनुसार यह फॉरवर्ड समारोह संरचना ऑपरेटर है: यहाँ मेरी उदाहरण मैं इसके बारे में लटका पाने के लिए उत्पन्न है।

12

इस्तेमाल किया >> ऑपरेटर दो काम करता है, तो x |> (g >> f) = x |> g |> f = f (g x) तैयार करता। एक अन्य ऑपरेटर << भी है जो दूसरी दिशा में बना है, ताकि (f << g) x = f (g x), जो कुछ मामलों में अधिक प्राकृतिक हो सकता है।

1

संरचना ऑपरेटर, << और >> दो कार्यों में शामिल होने के लिए उपयोग किया जाता है जैसे कि परिणाम का परिणाम दूसरे का इनपुट बन जाता है। के बाद से काम करता है, यह भी मान रहे हैं जब तक अन्यथा ध्यान दें, वे इस तरह के रूप में व्यवहार किया जाता है ताकि निम्न भाव बराबर हैं:

f1 f2 f3 ... fn x = (..((f1 f2) f3) ... fn) x

विशेष रूप से, f2, f3, ...fn और x मूल्यों के रूप में इलाज कर रहे हैं और करने से पहले के रूप में पारित किया जा रहा मूल्यांकन नहीं किया जाता उनके पिछले कार्यों के लिए पैरामीटर। कभी-कभी वह वही होता है जो आप चाहते हैं लेकिन दूसरी बार आप यह इंगित करना चाहते हैं कि एक समारोह के result दूसरे का इनपुट होना है।यह इस प्रकार रचना ऑपरेटरों << और >> का उपयोग कर महसूस किया जा सकता:

(f1 << f2 << f3 ... << fn) x = f1(f2(f3 ... (fn x)..)

(fn >> ... f3 >> f2 >> f1) x = f1(f2(f3 ... (fn x)..)

इसी के बाद से रचना ऑपरेटर एक समारोह, स्पष्ट पैरामीटर, x देता है, के विपरीत की आवश्यकता नहीं है पाइप ऑपरेटरों में x |> fn ... |> f1 या f1 <| ... fn <| x

संबंधित मुद्दे