An dieser Stelle werde ich den von Frau Prof. Dr. Esponda in der Vorlesung vorgestellten Parser auseinandernehmen. Ebenfalls interessant ist der Parser von Herrn Prof. Dr. Rojas, der wohl als Grundlage diente. Der Code, den ich aus ihren Folien zusammengeschrieben habe, zum Download: Lambda.hs

Aus der Prelude-Bibliothek werden die beiden Hilfsfunktionen “break” und “span” verwendet. Die break-Funktion spaltet eine Liste beim ersten Vorkommen einer Bedingung in zwei Listen und ist wie folgt definiert:

`

break :: (a -> Bool) -> [a] -> ([a],[a])
break p xs = span p' xs
	where p' x = not (p x)

`

Was die span-Funktion so treibt, muss ich noch herausfinden. So jedenfalls sieht sie aus:

`

span p [] = ([],[])
span p xs@(x:xs') -- xs wird als Synonym von (x:xs') verwendet
	| p x = (x:ys, zs)
	| otherwise = ([],xs)
	where (ys, zs) = span p xs'

`

An diesem Artikel bin ich gerade dran…