www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

Splinter

Gepostet:
08.12.2010 21:38

Stunden verzweifelt an Median und Sequenzen  
Hi,
in der UNI lernen wir jetzt neuerdings Haskell und mit funktionalem Programmieren hab
ich es anscheinend überhaupt nicht....

Schaut es euch mal an. Über jede (konstruktive) Hilfe bin ich sehr dankbar.
Thanx, Splinter

------------------------------------------------------------------------------

module Uebung6 where
type Text = String -- um zu verdeutlichen nach welchem Wort gesucht wird!
type Suchwort = String
isSubstring :: (Suchwort, Text) -> Bool

isSubstring x y
| x == y = True
| otherwise = False

-- Problem1: ich weiß nicht, wie ich dem Programm was sage; es kommt immer
-- ERROR - Improperly terminated character constant
-- Was müsste man jetzt überhaupt eingeben?
-- Problem2: mit der Lösung von Zeile7 x==y kann das Problem ja nicht gelöst sein
-- Problem3: zu subSequenz (das soll auch noch kommen) bin ich noch einfalls loser

-------------------------------------------------------------------------------

median :: [a] -> a
median xs
|[] =
|xs !! (div (length xs) 2) - 1


-- funktioniert nicht
-- Syntax error in expression (unexpected `|')
-- Was läuft da hinter den | falsch?
Zum Seitenanfang    
 
Siracusa

Gepostet:
09.12.2010 17:32

   
Hallo,

zu isSubstring: Da stimmt so einiges nicht ;-) Erstmal passen die Typsignatur und die Parameter nicht zusammen. Also entweder müssten die Parameter als Paar (x,y) verwendet werden, oder der Typ in Suchwort -> Text -> Bool geändert werden (Stichwort Currying). Dann würde x == y nur True liefern wenn bei Stings exakt übereinstimmen. Gefordert ist hier aber, dass x irgendwo in y vorkommt. Eine Möglichkeit das zu prüfen wäre zunächst alle Suffixe von y zu berechnen und dann zu prüfen, ob x ein Präfix irgendeiner dieser Suffixe ist. Brauchbare Hilfsfunktionen dazu finden sich im Modul Data.List.

zu median: Nach dem '|[] = ' steht bei dir keine rechte Seite, deshalb liefert er einen Fehler. Das gleiche Problem beim zweiten Fall. Eine Fallunterscheidung über Guards/Wächter sieht immer so aus:
funktion parameter
| bedingung1 = ergebnis1
| bedingung2 = ergebnis2
...
| bedingungN = ergebnisN

Wobei bedingungN üblicherweise otherwise ist, also die Bedingung, die alle anderen Fälle abdeckt.


Viele Grüße,

Siracusa
Zum Seitenanfang