www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

  1 2 3 4 5 6 nächste Seite

echsel

Gepostet:
18.12.2004 19:04

Haskell Problem  
Hallo!

Ich habe eine Afgabe bekommen, habe ich leider bischen Schwierigkeiten die zu schaffen :) Kann mir jemand etwas helfen? Ein Vorschlag wie ich diese Liste definieren soll. Weiter versuche ich selbst :)))

a. Definieren Sie im Programm eine Konstante buecherListe in Form einer Haskell-Liste mit genau 4 Elementen, die alle folgende Struktur haben:
( (autoren , Liste von Autoren ),
(titel , Titel des Buches ),
(verlag , Verlag in welchem das Buch erschienen ist ),
(jahr , Erscheinungsjahr des Buches ),
(preis, Buchpreis in Euro ) )
Wählen Sie dabei nur Bücher zum Thema Funktionale Programmierung aus!
b. Definieren Sie eine Funktion neuer_eintrag, die als Argumente alle erforderlichen Angaben zu einem Buch sowie den Namen einer Bücherliste erhält und die eine neue Liste erzeugt, welche die Bücher der alten Liste und das neue Buch enthält. Die Schlüsselwörter autor, titel, usw. sind als Argumente nicht zugelassen!
c. Definieren Sie eine Funktion numeriere_Liste , die als Argument den Namen einer Bücherliste erhält und als Wert eine Liste von Büchern liefert, in der alle Einträge aufsteigend numeriert sind.
d. Definieren Sie eine Funktion sucheTitel , die als Argument den Namen einer Bücherliste sowie ein Suchwort erhält und als Wert die Liste aller der Bücher liefert, die das gegebene Suchwort als Teil des Buchtitels enthalten.
e. Definieren Sie eine Funktion alleAutoren , die bei Vorgabe der Bücherliste als Wert eine Liste aller der Autoren liefert, die als Buchautor in der Liste vorkommen.
f. Definieren Sie eine Funktion showBuch , die als Argument ein Element aus der Bücherliste erwartet und als Wert eine Zeichenkette liefert, in der alle relevanten Informationen zu diesem Buch durch ein carriage return getrennt sind. Dabei werden die Schlüsselwörter wie autor, titel, usw. weggelassen.

Voraus Danke
MfG
Echsel
Zum Seitenanfang    
 
Jacke

Gepostet:
19.12.2004 14:25

   
hmm...und du sollst das wirklich in haskell machen ja? das klingt mir nämlich sehr angelehnt an ne aufgabe die ich mal in java machen sollte...
und die funktion neuer eintrag macht für mich in haskell keinen so richtigen sinn...weill ich das ja auch mit dem aufruf bücherliste machen kann? was viel kürzer wäre? euere tutoren haben euch doch bestimmt nen paar tipps zur aufgabe gegeben...nicht das ich völlig am ziel vorbeiprogrammiere...wenn ja poste die mal...du machst das doch für die uni oder?
ich versuch mich dann gleich mal noch nen bissel dran...

lg jacke
Zum Seitenanfang    
 
Jacke

Gepostet:
19.12.2004 16:07

   
type author=String
type titel=String
type publisher=String
type year=String
type price=String
type booklist=[(author,titel,publisher,year,price)]

exampleList::Booklist
exampleList=[("Simon Thomson","The craft of functional Programming","Addison-Wesley",,"1999","39,90e"),
("Dan Gookin","Haskell für Dummies","MitP","1998","99,99e")]

new_entry::Booklist->author->titel->publisher->year->price->Booklist
new_entry exampleList a t pub y pr =[a,t,pub,y,pr]++exampleList

searchTitel::BookList->titel->[titel]
searchTitel exampleList t=[titel|(author,titel,publisher,year,price)<-exampleList,titel==t]


so und den rest darfst du selber machen...ist aber nicht mehr so schwer...exampleList mußt du natürlich noch auf 4 bücher erweitern...

wenn du fragen zum prog poste einfach hier...

gruß jacke
Zum Seitenanfang    
 
echsel

Gepostet:
19.12.2004 19:20

   
HURAA!! :D

Endlich hat mir jemand geholfen! :D Jacke, danke für eine schnelle Antwort!!

Hugs (Hugs98 für Windows) hat mir ein paar Problemen gemeldet, aber das waren Kleinigkeiten wie Klein- , Großschreibe, fehlende Kalmmern oder ähnliche. Ich habe die korrigiert (hoffentlich richtig) und jetzt sieht das Programm so aus:

type Author=String
type Titel=String
type Publisher=String
type Year=String
type Price=String
type Booklist=[(Author,Titel,Publisher,Year,Price)]

exampleList::Booklist
exampleList=[("Simon Thomson","The craft of functional Programming","Addison-Wesley","1999","39,90e"),("Dan Gookin","Haskell für Dummies","MitP","1998","99,99e")]

new_entry::Booklist->Author->Titel->Publisher->Year->Price->Booklist
new_entry exampleList a t pub y pr =[(a,t,pub,y,pr)]++exampleList

-- searchTitel::Booklist->titel->[titel]
-- searchTitel exampleList t=[titel|(author,titel,publisher,year,price)<-exampleList,titel==t]

Ich arbeite immer noch daran, aber schon habe ich eine (dumme?:) )Frage: wie soll ich new_entry im Interpreter eingeben. Meine versuche liefern immer ein fehler :/

Main> new_entry Author,Titel,Publisher,Year,Price
ERROR - Syntax error in input (unexpected comma)
Main> new_entry Author Titel Publisher Year Price
ERROR - Undefined constructor function "Price"
Main> new_entry author titel publisher year price
ERROR - Undefined variable "price"
Main> new_entry [(Author,Titel,Publisher,Year,Price)]
ERROR - Undefined constructor function "Price"
Main> new_entry (Author,Titel,Publisher,Year,Price)
ERROR - Undefined constructor function "Price"
Main> new_entry [Author,Titel,Publisher,Year,Price]
ERROR - Undefined constructor function "Author"

was mache ich falsch?
Außerdem, lifert die Funktion searchtitel bei Kompilationsversuch auch ein Fehler

ERROR "C:\Documents and Settings\jaszczur\Pulpit\ksiazki.hs":15 - Inferred type is not general enough
*** Expression : searchTitel
*** Expected type : Booklist -> a -> [a]
*** Inferred type : Booklist -> [Char] -> [[Char]]

Ich siehe hier kein Fehler (bei new_entry fehlte die Klammern. Mindestens Hugs meldet kein Problemm mehr)

MfG
echsel

ps. Ich studiere a.d FH und dass ist meine vorletzte überfällige Aufgabe vor Vordiplomm. Es kommt noch eine Prolog-aufgabe und Vordiplomm wird mein!!! :D
Zum Seitenanfang    
 
Jacke

Gepostet:
19.12.2004 19:45

   
ich hab einfach mal drauflos geschrieben...ist also keine lauffähige version gewesen...
ich beheb mal noch die fehler...und poste gleich nochmal

gruß jacke
ps: ...ich studier an der FU Informatik(3tes Semester)
Zum Seitenanfang    
 
Jacke

Gepostet:
19.12.2004 19:52

   
also new_entry rufst du folgendermassen auf:

new_entry exampleList "b" "b" "b" "b" "b"

gruß jacke
Zum Seitenanfang    
 
echsel

Gepostet:
19.12.2004 20:11

   
Ja wohl, es stimmt :) Ich versuchte jetzt gerade eine "showlist" dazu schreiben, aber jetzt kann ich das verlassen :)
Zum Seitenanfang    
 
Jacke

Gepostet:
19.12.2004 20:14

   
so ich hab jetzt searchtitel hinbekommen...das problem ist das er nur die titel rausucht die man genau eingibt also wenn man nur haskell als suchwort eingibt dann gibt er ne leere liste zurück wenn man aber haskell für dummies eingibt geht es...aber den bug beheb ich dir bis morgen noch...
type Author=String 
type Titel=String
type Publisher=String
type Year=String
type Price=String
type Booklist=[(Author,Titel,Publisher,Year,Price)]

exampleList::Booklist
exampleList=[("Simon Thomson","The craft of functional Programming","Addison-Wesley","1999","39,90e"),("Dan Gookin","Haskell für Dummies","MitP","1998","99,99e")]

new_entry::Booklist->Author->Titel->Publisher->Year->Price->Booklist
new_entry eList a t pub y pr =[(a,t,pub,y,pr)]++exampleList

searchTitel::Booklist->Titel->Booklist
searchTitel eList t=[(author,titel,publisher,year,price)|(author,titel,publisher,year,price)<-eList,titel==t]

aufruf mit searchTitel exampleList "The Craft of Functional Programming"

gruß jacke...

ps wenn du beim rest noch probleme hast poste einfach hier...
Zum Seitenanfang    
 
echsel

Gepostet:
19.12.2004 20:50

   
ich denke, dass könnte der Befehl "elem" erledigen - man muss ihn nur richtig reinpassen :-)
Zum Seitenanfang    
 
Jacke

Gepostet:
19.12.2004 21:19

   
also ich hab die funktion substr über google gefunden ...und gleich mal eingebunden...jetzt geht searchTitel...elem kann man hier nicht verwenden...
type Author=String 
type Titel=String
type Publisher=String
type Year=String
type Price=String
type Booklist=[(Author,Titel,Publisher,Year,Price)]

exampleList::Booklist
exampleList=[("Simon Thomson","The craft of functional Programming","Addison-Wesley","1999","39,90e"),("Dan Gookin","Haskell fuer Dummies","MitP","1998","99,99e")]

new_entry::Booklist->Author->Titel->Publisher->Year->Price->Booklist
new_entry eList a t pub y pr =[(a,t,pub,y,pr)]++exampleList

searchTitel::Booklist->Titel->Booklist
searchTitel eList t=[(author,titel,publisher,year,price)|(author,titel,publisher,year,price)<-eList,substr t titel]

substr :: String -> String -> Bool
substr [] _ = True
substr (_:_) [] = False
substr (x:xs) (y:ys) = substr (x:xs) ys || f_substr (x:xs) (y:ys)
where
f_substr [] _ = True
f_substr (_:_) [] = False
f_substr (x:xs) (y:ys) = (x==y) && f_substr xs ys


das funktioniert jetzt alles

gruß jacke

ps:ich hab mal deine 3gleichen posts gelöscht
Zum Seitenanfang    
 

  1 2 3 4 5 6 nächste Seite