2012-12-24 9 views
6

मैं एन, जहां यह है कि जाना जाता है पर आकार एस की एक सूची विभाजित करने के लिए एस के एन, एम योग अप यह संकलन नहीं है कोशिश कर रहा हूँ:कैसे उपयोग कर एक स्केला सूची splitAt को निराकार

def splitIt[N <: Nat, 
      M <: Nat, 
      S <: Nat](u: Sized[List[Int], N] {type A = N}, 
         v: Sized[List[Int], M] {type A = M}, 
         t: Sized[List[Int], S] {type A = S})(implicit sum: SumAux[N, M, S]): Unit = { 
    val z = t.splitAt[N] 
} 

त्रुटियाँ

No implicit view available from List[Int] => scala.collection.GenTraversableLike[S,List[Int]]. 

not enough arguments for method sizedOps: (implicit evidence$2: List[Int] => scala.collection.GenTraversableLike[S,List[Int]])shapeless.SizedOps[S,List[Int],S]. Unspecified value parameter evidence$2. 

अंतिम सही संस्करण

def splitIt[N <: Nat, 
      M <: Nat, S <: Nat](u: Sized[List[Int], N] {type A = Int}, 
           v: Sized[List[Int], M] {type A = Int}, 
           t: Sized[List[Int], S] {type A = Int})(implicit sum: DiffAux[S, N, M], toInt: ToInt[N]): Unit = { 
    val z = t.splitAt[N] 
} 

उत्तर

5

typeAसूची के तत्वों के प्रकार की आवश्यकता है, आकार पुन: तर्क नहीं। यही कारण है कि यह GenTraversableLike[A, List[Int]] में कनवर्ट करने का प्रयास कर रहा है। आपको प्रत्येक मामले में A से Int सेट करने की आवश्यकता है।

+2

+1, लेकिन यह केवल पहला कदम है 'SumAux [N, M, S]' आपको 'डिफ [एस, एन]' नहीं मिला है, आपको सूची को विभाजित करने की आवश्यकता है (दुर्भाग्य से), और आपको 'एन' के लिए 'ToInt' भी जोड़ना होगा। –

+1

ने 'ए' को बदल दिया और 'toInt' अंतर्निहित जोड़ा। 'डिफ' कैसे जोड़ें? – Peteris

+2

@ पीटरिस: आप 'SumAux' को हटा सकते हैं (जब तक कि आपको इसे अपने वास्तविक कोड में किसी अन्य कारण के लिए आवश्यकता न हो) और 'डिफ [एस, एन]' या 'डिफएक्स [एस, एन, एम]' जोड़ें। –

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