Thread View: pl.comp.lang.funkcyjne
7 messages
7 total messages
Started by Anna Twardowska
Mon, 09 Dec 2002 16:49
Programowanie liniowe
Author: Anna Twardowska
Date: Mon, 09 Dec 2002 16:49
Date: Mon, 09 Dec 2002 16:49
5 lines
982 bytes
982 bytes
Poszukuje artkuly, ksiazki i strony internetowe zwiazane z tym tematem
--
============= P o l N E W S ==============
archiwum i przeszukiwanie newsów
http://www.polnews.pl
Re: Programowanie liniowe
Author: Tomasz Zielonka
Date: Mon, 09 Dec 2002 17:01
Date: Mon, 09 Dec 2002 17:01
14 lines
1337 bytes
1337 bytes
Anna Twardowska napisała: > Poszukuje artkuly, ksiazki i strony internetowe zwiazane z tym tematem Gdyby chodziło Ci o logikę liniową, to mogłaby z tego wyniknąć ciekawa dyskusja związana tematyką tej grupy. A może interesują Cię ciekawe sposoby rozwiązywania problemów z tej dziedziny w językach funkcyjnych? Podejrzewam że nie. Wyślij to pytanie raczej na pl.comp.programming pozdrawiam, tomek -- .signature: Too many levels of symbolic links
Re: Programowanie liniowe
Author: Lucifer
Date: Mon, 09 Dec 2002 19:53
Date: Mon, 09 Dec 2002 19:53
8 lines
1173 bytes
1173 bytes
Tomasz Zielonka wrote: > Gdyby chodziło Ci o logikę liniową Padlo pojecie ktore chyba pierwszy raz widze, mozna jasniej? -- Lucifer
Re: Programowanie liniowe
Author: Tomasz Zielonka
Date: Mon, 09 Dec 2002 23:44
Date: Mon, 09 Dec 2002 23:44
93 lines
4715 bytes
4715 bytes
Lucifer napisał:
> Tomasz Zielonka wrote:
>
>> Gdyby chodziło Ci o logikę liniową
>
> Padlo pojecie ktore chyba pierwszy raz widze, mozna jasniej?
W kontekście języków funkcyjnych powinienem raczej wspomnieć o typach
liniowych, które mają związek z logiką l. To znasz? Jeśli tak, to
trochę niepotrzebnie się rozpisałem :)
Nie jestem szczególnym znawcą w tej dziedzinie, ale spróbuję napisać o
co mniej więcej chodzi.
W różnych językach funkcyjnych różnie rozwiązuje się problem
destrukcyjnego uaktualniania stanu, wejścia/wyjścia, obiektów
mutowalnych (tablice, referencje) - jednym słowem mechanizmów
imperatywnych.
W językach gorliwych (SML, OCaml, Lisp, Scheme, Erlang, ...) najczęściej
po prostu udostępnia się takie mechanizmy w takiej samej lub podobnej
postaci jak w językach tradycyjnie uznawanych za imperatywne (Fortran,
C, Pascal).
W językach leniwych (Haskell, Clean) nie można tego zrobić tak po prostu
w ten sam sposób.
Głównym celem leniwości jest zwolnienie programisty z konieczności
określania czy i w jakiej kolejności mają być wykonywane poszczególne
obliczenia. Tu jest jeden problem - kolejność wykonywania operacji
imperatywnych przeważnie ma znaczenie. Przeglądarka WWW, która by
probowała odebrać odpowiedź z serwera jeszcze przed wysłaniem zapytania
byłaby raczej niezbyt użyteczna ;)
Drugi problem - języki funkcyjne mają umożliwiać, ułatwiać, a nawet
wymuszać sposób programowania, w którym obiekty na których się operuje
mają prostą, matematyczną semantykę wartości. W przypadku języka
imperatywnego można powiedzieć, że dana zmienna w pewnym momencie ma
wartość X, a w innym ma wartość Y, różną o X. W języku czysto-funkcyjnym
operuje się głównie na samych wartościach - wartościach niezmiennych,
więc takie stwierdzenie nie miałoby sensu.
Skupmy się na tablicach - jak można je efektywnie zaimplementować w
języku czysto-funkcyjnym? Przez "efektywnie" rozumiem stały
pesymistyczny koszt operacji update. Funkcja update bierze jako parametr
(tablica A, indeks I, wartość V), a jej wartością jest tablica, która,
oprócz tego, że na indeksie I ma wartość V, jest identyczna z tablicą A.
Wartości się nie zmienia, tylko produkuje nowe, zatem update nie może
tak po prostu zastosować podstawienia do wejściowej tablicy. No tak, ale
niezbyt efektywnie jest produkować nową tablicę za każdym razem, kiedy
się chce "zmienić" wartość pod jednym indeksem.
A gdyby mieć gwarancję, że "nikt już nie ruszy" wartości tablicy sprzed
zmiany?
Można wtedy trochę oszukać i wykorzystać wejściową tablicę - wykonać na
niej imperatywne podstawienie i zwrócić jako wartość funkcji. I tak nikt
nie zauważy ;)
Typy liniowe pozwalają właśnie śledzić użycia wartości i umożliwiają
bezpieczne zastosowanie tej optymalizacji. Ich związek z
Intuicjonostyczną Logiką Liniową jest taki jak związek Konstruktywnej
Teorii Typów z Logiką Intuicjonostyczną (słyszał ktoś o izomorfizmie
Curriego-Howarda?).
Pewien wariant takiego podejście zastosowano w języku Clean, gdzie
nazywa się toto Uniqueness Typing. W Cleanie UT używa się standardowo
do I/O, operacji na mutowalnych tablicach i FFI. Sam wymyśliłem jeszcze
dwa zastosowania, jedno proste, drugie trochę bardziej ciekawe, ale nie
będę już nudził.
Zainteresowanych szczegółami odsyłam do:
http://www.cs.kun.nl/~clean/
http://www.research.avayalabs.com/user/wadler/topics/linear-logic.html
PS. Konkurencyjne podejście zastosowane w Haskellu opera się na
monadach.
Pozdrawiam,
Tomek
--
.signature: Too many levels of symbolic links
Re: Programowanie liniowe
Author: Tomasz Zielonka
Date: Mon, 09 Dec 2002 23:48
Date: Mon, 09 Dec 2002 23:48
14 lines
1435 bytes
1435 bytes
Tomasz Zielonka napisał: > W różnych językach funkcyjnych różnie rozwiązuje się problem > destrukcyjnego uaktualniania stanu, wejścia/wyjścia, obiektów > mutowalnych (tablice, referencje) - jednym słowem mechanizmów > imperatywnych. Zapomniałem o wyjątkach, które nie bardzo dają się wprowadzić przy pomocy typów liniowych, ale można uzyskać używając monad. pozdrawiam, tomek -- .signature: Too many levels of symbolic links
Re: Programowanie liniowe
Author: Lucifer
Date: Tue, 10 Dec 2002 01:15
Date: Tue, 10 Dec 2002 01:15
9 lines
1283 bytes
1283 bytes
Tomasz Zielonka wrote: > Tomasz Zielonka napisał: > pozdrawiam, ja rowniez, dzieki za teksciora -- Lucifer
Re: Programowanie liniowe
Author: squallik
Date: Thu, 12 Dec 2002 19:37
Date: Thu, 12 Dec 2002 19:37
18 lines
1461 bytes
1461 bytes
Użytkownik "Anna Twardowska" <greg50@go2.pl> napisał w wiadomości news:02120917490470@polnews.pl... > Poszukuje artkuly, ksiazki i strony internetowe zwiazane z tym tematem > -- > ============= P o l N E W S ============== > archiwum i przeszukiwanie newsów > http://www.polnews.pl witam, a czy tej panie przypadkiem nie chodzi o troszke inna rzecz? mianowicie programowianie liniowe jest tez dzialem ekonometrii.... zupelnie nie zwiazane jest to z informatyka.... -- pozdro, www.puchaczy.waw.pl (/~squall)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads