Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Instance-konstruktionen i Haskell

Postades av 2006-12-04 01:35:00 - Niklas Jansson, i forum Skrivklåda, Tråden har 6 Kommentarer och lästs av 757 personer

Knepigt som tusan när man inte är inne i det. Har haft ett par funderingar på om jag inte ska ge upp och satsa på att få det att funka i C++ istället. Men jag håller ut ett tag till.

Jag har en klass Vector, till vilken jag har skapat en Matrix enligt:

data Matrix bounds info dist = Matrix ((Array bounds info), dist)

bounds är en godtycklig variabel, som är av klassen Ix. Man kan bland annat använda en tuppel, vilket jag har gjort, en 2-tuppel (x och y). Då tänker jag mig att jag kan köra med:

instance (Ix b, Num a) => Show (Matrix b a c) where
show (Matrix (arr, _)) = show ("y=[" ++ (unlines elem) ++ "]")
where elem = [unwords [show (arr!(x,y))
| x <- range (xl, xh)] ++ ";"
| y <- range (yl,yh)]
((xl, xh), (yl, yh)) = bounds arr

Kort sagt så tar jag rad för rad, mellanrum mellan varje enskilt element, och avslutar varje rad med ";".
Inga problem, men jag får felmeddelandet:

ERROR file:.\RungeKutta.hs:38 - Inferred type is not general enough
*** Expression : show
*** Expected type : Show (Matrix a b c) => Matrix a b c -> String
*** Inferred type : Show (Matrix (a,a) b c) => Matrix (a,a) b c -> String

Inga problem, det kan jag acceptera. Det är klart att bounds måste vara 2-tuppel.
Men hur jag än försöker får jag inte till det. Går det att fixa utan att ändra Matrix?
Eller ska jag göra något i stil med:

data Matrix bounds info dist = Matrix ((Array (xb, yb) info), dist)

istället?


Svara

Sv: Instance-konstruktionen i Haskell

Postades av 2006-12-04 02:26:06 - Per Persson

Helst skulle man vilja skriva

instance (Ix b, Num a) => Show (Matrix (b, b) a c) where

men det accepteras inte.

Varför inte skriva
data Matrix ix info dist = Matrix (Array (ix,ix) info, dist)

där ix är den typ (t.ex. Int) som indexerar var dimension i arrayen?


Svara

Sv:Instance-konstruktionen i Haskell

Postades av 2006-12-04 09:13:19 - Niklas Jansson

Jag hade tänkt att man kanske skulle vilja byta till större någon gång, men det går alltså inte?
Det var bland annat med

instance (Ix b, Num a) => Show (Matrix (b, b) a c) where


som jag provade. Förstår inte riktigt varför det inte är tillåtet...
Man kan inte ens skriva

instance (Ix b, Ix d, Num a) => Show (Matrix (b, d) a c) where

Det ger samma fel...


Svara

Sv: Instance-konstruktionen i Haskell

Postades av 2006-12-04 09:44:30 - Per Persson

Byta till större vad?


Svara

Sv:Instance-konstruktionen i Haskell

Postades av 2006-12-04 14:45:40 - Niklas Jansson

Byta till en datatyp som klarar större tal, för det är väl Integer som kan hålla hur stora som helst?
Int är väl en word?


Svara

Sv: Instance-konstruktionen i Haskell

Postades av 2006-12-04 15:57:28 - Per Persson

Om du kör med
<b>data Matrix ix info dist = Matrix (Array (ix,ix) info, dist)</b>
blir ju inte datatypen hårdkodad. Du kan lätt byta från Int till Integer.


Svara

Sv:Instance-konstruktionen i Haskell

Postades av 2006-12-04 17:00:03 - Niklas Jansson

Ah, ok, jag trodde du menade att jag inte skulle skriva ix utan Int. Har målat med lösningsmedel lite för mycket idag... =)


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 169
27 952
271 704
811
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies