Ro/Logica peste Z4

From HaskellWiki
Jump to navigation Jump to search
Haskell - Un limbaj functional pur

Haskell este limbajul functional succesor al LISP-ului, Scheme-ului si ML-ului !!!
Cel mai productiv limbaj functional ! Limbajul folosit de autorii limbajului Perl 6 si ales de echipa Linspire, utilizat la Inteligenta artificiala, prelucrari multimedia, Retele Petri, programare functionala in Robotica, sinteza de circuite electronice, motoare de baze de date , cercetare , productie de software "type safe",productie de limbaje (DSL-uri), proiectare automata de scheme electronice, analize statistice si financiare (bancare)...
V-am starnit curiozitatea ? Cititi: Intrebarile incepatorului. Am adaugat raspunsuri noi (16 dec. 2007- 10 feb. 2008).


Stirile lunii:Stiri Ro/Haskell

Cuprinsul paginii :


. Prezentarea proiectului

Exista deja un veritabil interes pentru Haskell din randul matematicienilor. De altfel daca intrebati pe un forum de discutii care ar fi cel mai bun limbaj pentru matematicieni - uni au intrebat - vi se va raspunde: Haskell.

Legaturile dintre Haskell si Matematica pot fi exploatate pentru a obtine specialisti in matematica aplicata capabili sa realizeze produse informatice bazate pe matematica.

Programul "Ro/Boosting your Math. Faculty with Haskell" isi propune sa mareasca potentialul unei Facultati de matemnatica prin introducerea Haskell-ukui ca limbaj de laborator si seminar. (da - ati citit bine, limbaj de laborator la matematica). Deja o serie de grupe de matematica - cel putin acolo unde lucreaza subsemnatul - fac or in laboratoarele de informatica.

Cum va afiliati programului ?

Nu e nevoie de concurs de proiecte dosar sau altceva. Tot ce aveti de facut este sa folositi Haskell-ul (Fie interpretorul Hugs sau WinHugs fie compilatorul GHC si versiunea sa interactiva GHCi.) Popularizati apoi rezultatele pe web, le vom centraliza aici acordand stelute * pentru fiecare din urmatoarele activitati:

Un mic exemplu Logica implementata peste Z4

Este o logica cu numai patru Predicate. Demonstrati ca are toate proprietatile unei logici, ca verifica toate axiomele acestea. Demonstratia nu v-o poate face Hugs-ul sau GHC-ul (decat cu tehnici de IA, dar ajungem in alt domeniu IA.). Observati ca Haskell nu ia locul matematicianului, doar ii da posibilitatea sa implementeze rezultatele si sa faca serii mari de calcule cu puterea computerului. Dar se obtine un cadru in care putem valorifica notiuni de matematica prin produse, de exemplu produse criptografice, (vezi Galois) sau grafice sau... lista e lunga.

Salvati exemplul ca fisier cu extensia .hs

module Logica where
-- Z4
class Resturi r where
  x    :: r -> r 
            -> r
  plus :: r -> r 
            -> r
  minus:: r -> r 
            -> r

newtype Z4 = Clasa Int 
             deriving Show 

instance Resturi Z4  where
  (Clasa a)  `x`    (Clasa b) = Clasa ((a*b) `mod` 4 )
  (Clasa a)  `plus` (Clasa b) = Clasa ((a+b) `mod` 4 )
  (Clasa a)  `minus` (Clasa b) = Clasa ((a+b) `mod` 4 )

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

-- Logica

class Logica l where
  negata     :: l -> l
  si         :: l -> l  
                  -> l
  sau        :: l -> l  
                  -> l

--  implica    :: l -> l  
--                  -> l
--  eqiv       :: l -> l  
--                  -> l



instance Logica  Z4 where
  negata p      = (Clasa 1) `minus` p
  p `si`  q     = p   `x` q
  p `sau`  q    = p `plus` q `minus` (p `x` q )

--  p `implica` q = ((Clasa 1) `minus` p) `plus` (p `x` q ))
--  p `echiv` q   = (Clasa 1) `minus` p `minus` q `plus`  ((Clasa 2) `x` p `x` q ))

-- Atentie, apostroful invers este pe tasta de linga cifra 1. In haskell daca o functie f o transformam in operator infixat se scrie: operand1 `f` operand2

Nota de utilizare: Daca nu merge exemplul sub GHC , GHC-ul va da un mesaj prin care poate cere sa activati o optiune de compilare, si va spune si care. Adaugati la inceput linia :

{- OPTIONS -XFlexibleInstances -}


. Cum rulati ?

Scrieti textul de mai sus, si incarcati-l in Hugs cu (File -> Open sau :load fisier.hs) . Sau dati click pe fisier daca ati instalat GHC-ul.

Acum puteti face calcule in Logica peste Z4,fara probleme, de exemplu de la consola (apoi din alte programe).

> (Clasa 3) `si` (Clasa 2) - apasati Enter si obtineti rezultatul.

. Dezvoltati exemplul

Implementati, depanati si testati implicatia si echivalenta. Atentie: Pentru usoara scriere a formulelor se pot defini prioritati ale noilor operatori astfel incat sa scapam de paranteze. (va urma)


Pagina indexata la indexul Categories:Ro


<= Inapoi la inceputul paginii principale Ro/Haskell.

<- Inapoi la Intrebarile incepatorului Ro/Haskell.


BannerProLinuxAndHaskell.gif

La facultate poti invata unul din cele mai productive limbaje: Haskell.