PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche Prog zum Testen primitiv-rekursiver Funktionen


Nasenbaer
2006-02-19, 16:11:54
Hi,
kennt jemand ein Programm mit dem man testen kann ob die ausgedachte primitiv rekursive Funktion wirklich seinen Zweck erfüllt?
Habs mal mit Haskell versucht aber das klappt nicht so wirlich (vielleicht sind dazu meine Haskell Kentnisse auch zu dürftig :/ )

Hat da jemand was besseres?

Trap
2006-02-19, 16:26:59
Was meinst du mit "Zweck erfüllt"?

Was genau hat mit Haskell nicht geklappt?

bfm
2006-02-19, 16:52:34
Wenn du mir sagst, was du machen möchtest, könnte ich es auch mal in Haskell versuchen.

Ansonsten mache ich sowas auf sehr äh rudimentäre Weise: mit Zettel und Kuli :)

Nasenbaer
2006-02-19, 17:00:15
Z.B. weiß ich nicht wie ich die Auswahlfunktion gestalten soll.
Schließlich hat sie ja eine variable Anzahl an zu übergebenen Parametern.

Ein anderes praktisches Problem ist das hier:

-- Addition
add :: (Int,Int) -> Int
add(x,0) = const(x)
add(x,n) = succ(add(x,n-1)) -- schould be -> add(x,succ(n)) = succ(add(x,n))

Ich kann auf der linken seite nicht add(x,succ(n)) schreiben - da meckert er denn rum (Parse error in pattern)


P.S.: "Zweck erfüllt" = korrekt arbeitet

Trap
2006-02-19, 17:17:53
Ich fand http://www.inferenzsysteme.informatik.tu-darmstadt.de/verifun/ recht brauchbar zur Verifikation.

Variable Anzahl Parameter -> Liste an Parametern übergeben

data Nat = Zero | SuccN Nat

add :: (Nat,Nat) -> Nat
add(x,Zero) = x
add(x,SuccN(y)) = SuccN(add(x,y))

toNum :: Nat -> Int
toNum Zero = 0
toNum (SuccN x) = 1+toNum(x)

toNum (add (Zero, SuccN Zero)) ergibt dann das zu erwartende Ergebnis. Es geht wahrscheinlich auch direkt mit den eingebauten Zahlen, dafür kenn ich Haskell aber nicht gut genug.

Nasenbaer
2006-02-20, 21:00:42
Oh danke für das nachgeschobene Update. :)

Hab heute auch rausgefunden was ich falsch gemacht hatte - und das während der Prüfung in Programmierungstechnik. *gg*

Eigentlich sind diese funktionalen Programmiersprache ja ne echt feine Sache. Man kann damit teils so komplexe Sachen viel einfacher gestalten als mit den "normalen" imperativen Sprachen.
Z.B. Faktultätsberechnungen - Pascal macht ab 13! nen Abgang aber Haskell juckt sowas gar nicht :)

Expandable
2006-02-20, 21:37:18
Pascal macht ab 13! nen Abgang aber Haskell juckt sowas gar nicht :)

Schlechtes Beispiel. Das hat nämlich nix mit funktional oder imperativ zu tun, sondern lediglich mit den build-in Datentypen.

Aber gerade Sortieralgorithmen sind z.B. in Haskell sehr schön kompakt zu machen, während sie in C ziemlich hässlich sind.

Gast
2006-02-21, 21:11:01
Naja zur meinte man es liegt an der völlig anderen Arbeitsweise von Haskell - daraus hab ich mir das dann halt zusammengereimt. :D

Da wir Haskell bzw. Z zur Spezifikation von Algorithmen nutzen denke ich immer anfangs immer "hey ist ja simpel" aber wenn wir es denn in Pascal implentieren dürfen kommt man teils schnell ins schleudern - gerade wenn Pointer genutzt werden. *g*

Nasenbaer
2006-02-21, 21:16:15
Der Gast, der nicht schreiben kann, war übrigens ich :)

Eine Frage kommt mir da gerade noch:
Also da manche Sachen ja echt leicht mit funktionalen Programmiersprachen realisierbar sind, warum wird es dann nicht oder nur sehr selten für "normale" Software genutzt? Zumal es dafür ja auch Support für GTK, OpenGL usw. gibt.