să scriem împreună un simulator de automate celulare (ii)

duminică, 4 nov. 2012, 14:17

Data trecută am discutat câteva aspecte generale legate de automatele celulare și am implementat o funcție care va sta la baza implementării zisului simulator. Aceasta se numește nextCell și întoarce valoarea unei celule după un pas în funcție de valoarea sa și de cea a vecinilor, și în primul rând de numărul care specifică pe scurt regulile de producție ale automatului elementar. Să punem din nou pe foaie signatura funcției:

nextCell :: Elementary -> (Cell, Cell, Cell) -> Cell

Mai departe dorim să extindem această funcționalitate la o așa-zisă „latice”, adică la un șir de celule, pe care noi îl vom reprezenta printr-o listă. Cu alte cuvinte vrem, cunoscând numărul automatului celular, să luăm pe rând fiecare celulă dintr-o listă dată împreună cu vecinii ei la momentul t și să obținem starea celulei la momentul t + 1. Implementarea acestei operații e un pic mai dificilă decât ar părea la o primă vedere, din cauza unor limitări cărora le sunt supuse listele ca model de reprezentare. Să explicăm pe scurt câteva din aceste limitări. (mai mult…)

să scriem împreună un simulator de automate celulare (i)

duminică, 14 oct. 2012, 12:06

Automatele celulare au reprezentat o noutate prin anii ’40-’60, la momentul descoperirii lor de către Ulan și von Neumann. În anii ’70-’80 conceptul a devenit iarăși un subiect de interes datorită cercetărilor (mai degrabă empirice) făcute de Stephen Wolfram și alții pentru a reprezenta și studia diverse trăznăi precum modele ale fizicii digitale sau ale vieții. În anii 1990-2010 descoperirile în cadrul domeniului merg într-un ritm lent, însă nu încetează a se ivi. Cu toate acestea automatele celulare rămân o unealtă educațională extrem de utilă, dată fiind puterea de reprezentare care stă la baza lor. Am arătat deja cum putem modela cu ajutorul acestora un fenomen comun prezent în natură și în mediile sociale, ne mai rămâne doar să punem în practică conceptele prezentate.

Pentru a putea atinge scopul articolului, acela de a construi un simulator de automate celulare, avem nevoie de unelte ajutătoare. Acestea pot fi după caz plăci de textolit, tranzistoare, lămpi, ansambluri hidraulice sau piese LEGO; va trebui însă să mă credeți pe cuvânt că cea mai simplă cale de a implementa un automat celular este scrierea unui program, orice astfel de mașinărie teoretică fiind echivalentă cu cel puțin un subset al unui automat Turing. Din motive în principal egoiste, dar și pentru că doresc să împing mintea cititorului într-un anumit șablon de gândire, aleg să scriu programul care simulează automate celulare în Haskell; nu în C, Python, Java, Ruby sau ce alte fetișuri mai au programatorii în ziua de astăzi, ci într-un limbaj funcțional, care poate transpune în mod natural concepte matematice elementare precum funcțiile în construcții care mai apoi vor rula pe calculator.

Există deci câteva motive pentru care merită să parcurgeți articolul de față și pe cele ce-i vor urma: (mai mult…)

ce am învățat despre sistemul de pingback-uri din wordpress

sâmbătă, 28 ian. 2012, 11:52

Acum ceva vreme speculam pe Trilemă despre pingback-uri și cam cum e posibil să funcționeze ele. Scriu aceste rânduri pentru că sper că le va citi cândva un dezvoltator al WordPress-ului și se va încumeta să rezolve odată pentru totdeauna problema pe care o voi descrie mai jos, la fel cum voi descrie și de ce eu unul mi-am băgat definitiv picioarele și alte membre într-însa.

Am considerat mereu pingback-ul/trackback-ul ca fiind o unealtă extrem de utilă blogger-ului, dat fiind faptul că autorii de blog-uri mai discută între ei și preferă o alternativă la lăsatul de comentarii kilometrice (deși eu mai fac asta). Alternativa se dovedește a fi acel sistem prin care dacă individul A scrie un articol P iar B scrie un articol P' care face referință la chestii din P, atunci putem stabili existența unei legături concrete P \rightarrow P', legătură concretizată printr-un sumar al lui P' în cadrul comentariilor lui P. Acel comentariu se va numi pingback etc.

Sistemul e decent specificat, însă are lacune la nivelul implementării în WordPress, care-i o monstruozitate cu șaptișpe picioare și patrujdouă de capete, plus câteva falusuri imense care încearcă să ne violeze anal pe noi, utilizatorii de rând, indiferent de gen. Dar cum eu sunt un utilizator de rând mai rezilient, m-am apucat să iau codul la puricat și să văd ce se întâmplă acolo. (mai mult…)

language style evolution

duminică, 21 feb. 2010, 16:52

[ case study: that Hamlet cliché ]

English:

To be, or not to be: that is the question:

C:

q = to ? be : !be;

Haskell:

q = or [to be, (not . to) be]

… and so on.

the badger, the mushroom, the snake and the haskell

marți, 22 dec. 2009, 22:10

How they all fit together:

1
2
3
4
5
6
7
8
module Badger where
 
badger :: Int -> Int -> [String]
badger mushroom snake = badger' mushroom snake mushroom snake
    where
    badger' m s 0 s' = "Mushroom" : "Mushroom" : badger' m s m s'
    badger' m s m' 0 = "Snaaaaaaaaake" : badger' m s m s
    badger' m s m' s' = "Badger" : badger' m s (m' - 1) (s' - 1)

A Haskell 8-liner based on this short made by Weebl.