Les 3

De vorige keer zagen we dat Lisp programma’s en data bestaan uit ‘lists’: lijstjes. Daar komt de naam LISP ook vandaan: LISt Processing. De eerste positie in een lijst wordt behandeld (geëvalueerd) als zijnde een functie, de volgende posities zijn dan de input data voor die functie.

Je kunt een lijst ook als data behandelen, dan zet je er een quote voor, alles wat achter een quote staat wordt niet geëvalueerd. Maar je kunt lijstjes ook ‘nesten’, lijstjes in lijstjes in ….ad infinitum, je moet het zien als een boom structuur elk openingshaakje maakt een nieuwe vertakking aan.

NewLisp heeft een groot aantal standaardfuncties, ga in de editor naar Help/newLisp Manual and Reference dan kun je ze zien in de linker kolom. Als eerste stap voor onze scrabblebot gaan we van een aantal van deze functies gebruikmaken om een woordenlijst te downloaden en op te schonen. Ga hiernaartoe  en download de standaard woordenlijst van 500.000 woorden (BIG data!).

De file woorden.lst zit nu in je download directory, (op mijn mac is dat “/Users/fdbruin/Downloads/woorden.lst” ). Op windows moet je hem eerst unzippen (gaat op de mac automatisch). In de newLisp editor typ (read-file “/Users/fdbruin/Downloads/woorden.lst”) , waarbij je /Users/fdbruin/Downloads natuurlijk moet vervangen door jouw download directory en alle 500.000 woorden vliegen voorbij!

Om er nu nette strings van te maken moeten we dit ‘parsen’ dus type maar in:

(parse (read-file "<jouw/donwload/directory>/woorden.lst"))

en de hele text is opgeknipt in strings. Wat we hier doen noemen we functie compositie, de output van een functie wordt door een andere functie gebruikt en je kunt behalve data ook functies zelf ‘doorgeven’. Bijvoorbeeld type maar eens in:

(filter( fn(x) (> 9 (length (x))) (parse (read-file "<jouw-download/directory>/woorden.lst")))

Opgave voor de volgende keer: sorteer het lijstje op lengte van de woorden. Ben benieuwd!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *