www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

  1 2 nächste Seite

Christian

Gepostet:
10.01.2008 15:50

Abfrage  
Hi

Ich habe mal eine Frage.

Ich habe eine Funktion zum berechnen von Rechteckintegral.

Ich wollte das testen und habe immer den Fehler:

ERROR - Cannot find "show" function for:
*** Expression : rechteckregel_l 5 6
*** Of type : (Double -> Double) -> Double

oder

ERROR - Cannot infer instance
*** Instance : Num (a -> Double)
*** Expression : rechteckregel_r (fromInt 5 7)

Was mache ich falsch

Danke im vorraus
Zum Seitenanfang    
 
Christian

Gepostet:
10.01.2008 15:52

Zur Frage  
rechteckregel_l:: Double->Double->(Double->Double)->Double
rechteckregel_l x y f=(y-x)*f(x)

rechteckregel_r::Double->Double->(Double->Double)->Double
rechteckregel_r x y f=(y-x)*f(y)

trapezregel::Double->Double->(Double->Double)->Double
trapezregel x y f=(y-x)*(f(x)+f(y))/2


Hier sind die Integrale zu meinen Funktionen
Zum Seitenanfang    
 
Siracusa

Gepostet:
10.01.2008 17:14

   
Hallo Christian,

zur ersten Fehlermeldung:
rechteckregel_l ist vom Typ Double -> Double -> (Double -> Double) -> Double. Das bedeutet, es wird als erstes und zweites Argument ein Wert vom Typ Double erwartet. Das dritte Argument soll eine Funktion sein, die einen Double in einen Double umwandelt. Als Funktionsergebnis wird wieder ein Double geliefert. Bei deinem Aufruf sind die ersten beiden Argumente gegeben, es fehlt aber noch die Funktion, über die integriert werden soll:
-- Als Beispiel eine lineare Funktion
linear :: Double -> Double
linear x = 0.5*x + 1

Aufruf:
rechteckregel_l 5 6 linear


Zur zweiten Fehlermeldung:
Zu erklären, warum genau diese Fehlermeldung kommt, führt jetzt vielleicht etwas zu weit, das hat mit Haskells Typklassen-System zu tun. Kurz gesagt liegt der Fehler darin, daß fromInt nur ein Argument erwartet, du aber zwei Werte übergeben hast. Der Aufruf von fromInt sollte eigentlich nicht nötig sein, aber wenn du es unbedingt verwenden möchtest, dann sollte das so funktionieren:
Aufruf:
rechteckregel_l (fromInt 5) (fromInt 6) linear


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Christian

Gepostet:
16.01.2008 20:31

Testproblem bei funktionen in haskel  
f1 x=(x^3)-(3*x^2)+5
f2 x=log x

--Näherungswerte für Integral

rrl :: Double -> Double ->(Double -> Double) -> Double
rrl x y f
| x>y = error"x muss kleiner sein als y"
|otherwise = (y-x) * f(x)

rrr :: Double -> Double ->(Double -> Double) -> Double
rrr x y f
| x>y = error "x muss kleiner sein als y"
|otherwise = (y-x) * f(y)

tr :: Double -> Double ->(Double -> Double) -> Double
tr x y f
| x>y = error "x muss kleiner sein als y"
| otherwise =(y-x)*( (f(x)+f(y) )/2)



--Intervall->[a,b],fkt->f,schrittweite->h,Näherungsregel->nr

b_integral::Double->Double->(Double->Double)->Double->(Double -> Double ->(Double -> Double) -> Double)->Double

b_integral a b f h nr=
if b-a>h
then (nr a c f)+(b_integral c b f h nr)
else (nr a b f)
where c=a+hHallo

kann mir jemand sagen warum ich immer eine fehlermeldung beim testen der einzelnen funktionen bekomme
Das hat jemand beim lehrer schon abgegeben und das ok bekommen

Ich habe das bekommen und bekomme immer fehlermeldung
Was mache ich falsch


Kann mir jemand zeigen wie man die funktionen programmiert, so das die beim testen funktionieren

Danke

Christian
Zum Seitenanfang    
 
Siracusa

Gepostet:
16.01.2008 21:46

   
Hallo,

welche Testfälle funktionieren denn bei dir nicht und welche Fehlermeldungen bekommst du? Hab grad selbst ein Beispiel ausprobiert und keinen Fehler bekommen.


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Christian

Gepostet:
16.01.2008 22:26

   
Hi

Danke Für deine Unterstützung

Kannst du mir Beispiele geben wie du dia Abfrage gemacht hast. Ich habe garantiert die Abfrage falsch

geschrieben.

Dann nochwas zu haskell

Was sind Lamda Ausdrücke und wann werden die verwendet

Danke für deine Ünterstützung
Zum Seitenanfang    
 
Siracusa

Gepostet:
16.01.2008 23:50

   
Das habe ich getestet:
Aufruf: b_integral 1 2 f1 0.1 tr
Ergebnis: 1.7525


Lambda-Ausdrücke sind eine weitere Möglichkeit Funktionen zu beschreiben. Sie werden folgendermaßen gebildet:
    \variablen -> ausdruck.
Dabei sind variablen eine oder mehrere Variablen, und ausdruck ein Ausdruck, der die Variablen verwendet. Das Ergebnis dieses Lamdba-Ausdrucks ist eine Funktion vom Typ: (Typ von variablen -> Typ von ausdruck). Der Vorteil liegt darin, das man die Funktion nicht mit einem Namen versehen muß. Man kann sie direkt in einem anderen Ausdruck verwenden. Das ist vor allem bei kurzen Funktionen praktisch, die man so "mal schnell" für andere Funktionen verwenden kann, die eine Funktion als Parameter erwarten.

Ein Beispiel:
-- Normale Funktion:
f2 :: Double -> Double
f2 x = log x

-- Als Lambda-Ausdruck
f2 :: Double -> Double
f2 = (\x -> log x)


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Christian

Gepostet:
18.01.2008 00:15

   
Hallo

norm::[Double]->Double
norm a =(sqrt.quadsum)a

g:: [Double]-> [Double]->[Double]
g [] [] = []
g (a:ar) (b:br) = (a-b):(g ar br)

dist::[Double]->[Double]->Double
dist a b = (norm(g a b))

Ich gebbe ein dist [1] [5]

bekomme als Antwort: Program error: argument out of range

Warum kommt diese Meldung

Danke
Zum Seitenanfang    
 
Siracusa

Gepostet:
18.01.2008 17:07

   
Hallo,

da hilft es, sich mal nachzuvollziehen, was bei der Auswertung passiert:

dist [1] [5]
= norm (g [1] [5])
= norm ((-4):g [] [])
= norm [-4]
= (sqrt . quadsum) [-4]
= sqrt (quadsum [-4])

Jetzt hast du nicht angegeben, was quadsum macht, aber ich schätze es liefert einen negativen Double-Wert. Von diesem willst du dann die Wurzel ziehen, was nicht erlaubt ist. (Oder der Fehler tritt bereits in der Funktion quadsum auf.)


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Christian

Gepostet:
15.02.2008 17:56

Datentypen  
Ichg habe mal eine frage

Wo liegt der Unterschie bei den Datentyoen int in c und Int in Hakell

Das war eine Klausurfrage

Christian
Zum Seitenanfang    
 

  1 2 nächste Seite