/ / हास्केल, प्रकार के मुद्दे को हल नहीं कर सकता: Data.Vector.zip fromList [1..10] fromList [1..10] - haskell

हास्केल, प्रकार की समस्या को हल नहीं कर सकता: Data.Vector.zip से सूची [1..10] सूची से [1..10] - हैकेल

जब मैं दौड़ता हूँ

let v = Data.Vector.zip fromList[1..10] fromList[2..11]

मुझे त्रुटि मिली

"T मैच अपेक्षित प्रकार t वेक्टर b0 ' वास्तविक प्रकार के साथ actual [Integer] '

इसके बजाय मुझे ऐसा करना होगा:

let v1 = fromList[1..10]
let v2 = fromList[2..11]
let v = Data.Vector.zip v1 v2

fromList वेक्टर प्रकार है Data.Vector में

क्या कोई मुझे समझा सकता है कि क्यों डेटा से 1.List [1..10] को वेक्टर प्रकार में नहीं बदला जा सकता है। और मुझे v1 और v2 बनाना होगा?

उत्तर:

उत्तर № 1 के लिए 4

सबसे पहले, चलो

import qualified Data.Vector as V

टाइप करने से बचने के लिए Data.Vector.zip.


हास्केल के पार्सिंग नियम अक्सर शुरुआती को रोकते हैं, लेकिन स्पष्ट रूप से मुझे लगता है कि यह अधिक है क्योंकि वे भी हैं सरल बल्कि बहुत अजीब है। संक्षेप में:

  1. कोष्ठक / कोष्ठक केवल उनकी सामग्री को समूहीकृत करें, वे कभी भी बाहर कुछ भी प्रभावित नहीं करते हैं। इसलिए, f(x), (f)x तथा (f) (x) सभी समान हैं, अधिमानतः बस लिखे गए हैं f x.
  2. Infix ऑपरेटरों किसी भी फ़ंक्शन एप्लिकेशन की तुलना में कम कसकर बांधें।
  3. फंक्शन एप्लिकेशन लालच से बाएं से दाएं सब कुछ इकट्ठा करता है।

आप दो टोकन के बीच कितना व्हाट्सएप डालते हैं, यह पार्सर द्वारा बिल्कुल नहीं माना जाता है।

तो आपके उदाहरण में, हम कर सकते हैं

  1. सूची को स्थानीय नाम दें:

    l₁ = [1..10]
    l₂ = [2..11]
    v = V.zip fromList l₁ fromList l₂
    
  2. यहां कोई इनफिक्स ऑपरेटर नहीं हैं.

  3. लालच से तर्क इकट्ठा करें:

    v = (V.zip fromList) l₁ fromList l₂
    = ((V.zip fromList) l₁) fromList l₂
    = (((V.zip fromList) l₁) fromList) l₂
    

    अन-क्यूरेड लैंग्वेज इस तरह लिखेंगे zip(fromList, l₁, fromList, l₂), और यह स्पष्ट रूप से नहीं है कि आप क्या चाहते हैं।

इस के आसपास जाने का सबसे सीधा तरीका है, कोष्ठक:

v = V.zip (fromList [1..10]) (fromList [2..11])

... या पैक किए गए वैक्टर को अपने नाम दें

v₁ = fromList [1..10]
v₂ = fromList [2..11]
v = V.zip l₁ l₂

... या लिखने से बचें fromList पूरी तरह से:

{-# LANGUAGE OverloadedLists #-}

v :: V.Vector Int
v = V.zip [1..10] [2..11]

आप सोच सकते हैं कि क्या हो रहा है . में Data.Vector.zip। यह infix ऑपरेटर नहीं है . लेकिन वो मॉड्यूल क्वालिफायर प्रतीक। यह एक विशेष पार्सिंग नियम के साथ केवल दो "इनफ़िक्स प्रतीकों" में से एक है (दूसरे में एक शून्य से शून्य): फॉर्म का कुछ भी Foo.bar (अपरकेस के साथ Foo और कोई व्हाट्सएप!) एक एकल टोकन के रूप में मान्यता प्राप्त है bar मॉड्यूल से आ रहा है Foo.