-
1. Data: 2014-01-18 00:01:54
Temat: generowanie programow
Od: g...@g...com
Bardzo ladne wystapienie Daniela Friedmana
i Williama Byrda wprowadzajace w system do
programowania w logice "kanren" dla Scheme'u.
Polecam obejrzenie przynajmniej pierwszych
20 minut, bo to, co sie dzieje w 20-tej minucie,
robi wielkie wrazenie :]
http://www.youtube.com/watch?v=fHK-uS-Iedc
Mowiac w skrocie: autorzy najpierw pokazuja,
w jaki sposob mozna przepisac program napisany
w stylu funkcyjnym na "program w logice"
(poprzez dopisanie dodatkowego argumentu,
majacego reprezentowac wynik), przy okazji
zwracajac uwage na pewne niuanse.
Nastepnie biora kod zrodlowy ewaluatora
metacyklicznego i przerabiaja go w taki
sposob.
A na koniec... niespodzianka :)
-
2. Data: 2014-01-18 00:07:45
Temat: Re: generowanie programow
Od: g...@g...com
Przepraszam, wkleilem zlego linka.
Tutaj jest prawidlowy:
http://www.youtube.com/watch?v=5Q9x16uIsKA
-
3. Data: 2014-01-18 03:35:48
Temat: Re: generowanie programow
Od: A.L. <a...@a...com>
On Fri, 17 Jan 2014 15:01:54 -0800 (PST), g...@g...com
wrote:
>Bardzo ladne wystapienie Daniela Friedmana
>i Williama Byrda wprowadzajace w system do
>programowania w logice "kanren" dla Scheme'u.
>Polecam obejrzenie przynajmniej pierwszych
>20 minut, bo to, co sie dzieje w 20-tej minucie,
>robi wielkie wrazenie :]
>
>http://www.youtube.com/watch?v=fHK-uS-Iedc
>
>Mowiac w skrocie: autorzy najpierw pokazuja,
>w jaki sposob mozna przepisac program napisany
>w stylu funkcyjnym na "program w logice"
>(poprzez dopisanie dodatkowego argumentu,
>majacego reprezentowac wynik),
A co to ma wspolnego z "programwoaniem w logice"?...
A.L.
P.S> 20 minut bede ogladal jak pojde na emeryture
-
4. Data: 2014-01-18 09:12:33
Temat: Re: generowanie programow
Od: g...@g...com
W dniu sobota, 18 stycznia 2014 03:35:48 UTC+1 użytkownik A. L. napisał:
> On Fri, 17 Jan 2014 15:01:54 -0800 (PST), g...@g...com
> wrote:
>
>
> >Bardzo ladne wystapienie Daniela Friedmana
> >i Williama Byrda wprowadzajace w system do
> >programowania w logice "kanren" dla Scheme'u.
> >Polecam obejrzenie przynajmniej pierwszych
> >20 minut, bo to, co sie dzieje w 20-tej minucie,
> >robi wielkie wrazenie :]
> >
> >http://www.youtube.com/watch?v=fHK-uS-Iedc
> >
> >Mowiac w skrocie: autorzy najpierw pokazuja,
> >w jaki sposob mozna przepisac program napisany
> >w stylu funkcyjnym na "program w logice"
> >(poprzez dopisanie dodatkowego argumentu,
> >majacego reprezentowac wynik),
>
>
> A co to ma wspolnego z "programwoaniem w logice"?...
Co co ma wspolnego z programowaniem w logice?
> P.S> 20 minut bede ogladal jak pojde na emeryture
Czekam zatem ;]
-
5. Data: 2014-01-18 09:47:20
Temat: Re: generowanie programow
Od: g...@g...com
W dniu sobota, 18 stycznia 2014 09:12:33 UTC+1 użytkownik g...@g...com
napisał:
> > >Mowiac w skrocie: autorzy najpierw pokazuja,
> > >w jaki sposob mozna przepisac program napisany
> > >w stylu funkcyjnym na "program w logice"
> > >(poprzez dopisanie dodatkowego argumentu,
> > >majacego reprezentowac wynik),
> >
> >
>
> > A co to ma wspolnego z "programwoaniem w logice"?...
>
> Co co ma wspolnego z programowaniem w logice?
Pozwole sobie zagdywac, jaka byla intencja za tym
dosc lakonicznie sformulowanym pytanie.
Otoz z punktu widzenia logiki funkcja to relacja
roznowartosciowa pomiedzy dwoma zbiorami. Mowiac
scisle, powiemy, ze F jest funkcja wtw
dla kazdego x istnieje dokladnie jedno y takie,
ze F(x,y), albo jeszcze inaczej, ze dla kazdego x
istnieje takie y, ze F(x,y) i dla kazdego z, jesli
F(x,z) to y=z.
Mozemy wowczas pisac y = f(x).
Podstawowa idea programow napisanych w stylu
funkcyjnym jest taka, ze procedury realizuja
funkcje, czyli ze procedura wywolana z tymi
samymi argumentami zawsze zwroci taki sam
wynik.
Dodatkowo programy napisane w stylu funkcyjnym
unikaja przypisan i petli, a zamiast nich
stosuja rekursje.
Systemy do programowania w logice nie pozwalaja
w ogole definiowac procedur, a jedynie predykaty.
Poza tym dziela z programami funkcyjnymi te
wlasnosc, ze nie dopuszczaja przepisan.
Majac dana funkcje y=f(x), musimy stworzyc predykat
F(x,y) taki, ze F(x,y) <=> y=f(x). Na tym wlasnie
polega przejscie od programu funkcyjnego do programu
w logice.
Na pozor mogloby sie wydawac, ze to przejscie
jest trywialne, bo w jezyku funkcyjnym wystarczyloby
zdefiniowac
F(x,y) =df y=f(x)
i chociaz w sensie warunkow prawdziwosci jest ok, to
jednak systemy do programowania w logice nie zajmuja
sie tylko badaniem prawdziwosci, ale przede wszystkim
dostarczaniem zbiorow rozwiazan spelniajacych okreslone
warunki. Dlatego chcac uzyskac logiczna wersje definicji
programu funkcyjnego, nalezy jeszcze zastapic operator
porownania operatorem unifikacji i wykonac pare innych
zabiegow (a w szczegolnosci oczywiscie zastapic wywolania
rekurencyjne f odwolaniami do F)
Mam nadzieje, ze to odpowiada na Twoje pytanie.
-
6. Data: 2014-01-18 10:35:44
Temat: Re: generowanie programow
Od: g...@g...com
W dniu sobota, 18 stycznia 2014 09:47:20 UTC+1 użytkownik g...@g...com
napisał:
> Mam nadzieje, ze to odpowiada na Twoje pytanie.
Chyba ze pytales, co wskazana przeze mnie prezentacja
ma wspolnego z programowaniem w logice. Wowczas jednak
bedziesz chyba musial poczekac z uzyskaniem odpowiedzi
do emerytury
-
7. Data: 2014-01-18 12:08:42
Temat: Re: generowanie programow
Od: firr <p...@g...com>
W dniu sobota, 18 stycznia 2014 10:35:44 UTC+1 użytkownik g...@g...com
napisał:
> W dniu sobota, 18 stycznia 2014 09:47:20 UTC+1 użytkownik g...@g...com
napisał:
>
>
>
> > Mam nadzieje, ze to odpowiada na Twoje pytanie.
>
>
>
> Chyba ze pytales, co wskazana przeze mnie prezentacja
>
> ma wspolnego z programowaniem w logice. Wowczas jednak
>
> bedziesz chyba musial poczekac z uzyskaniem odpowiedzi
>
> do emerytury
z AL'em ciezko pogadac rzeczowo;/, aczkolwiek szczerze mowiac mnie osobiscie AL
zaskoczyl ze dwa razy pewnymi przejawami 'wyzszej inteligencji' (zief)
i coponiektóre wypowiedzi maja nawet sporo sensu ale
Al z niewiadomych powodów ich 'nie wyjasnia' ;]\
(co do ogladnia prezentacji na video ja tez ich
nie ogladam, w pierwszej mierze dlatego ze mam
slaby net)
(co do mnie to chyba teraz wypadaloby sie znowu troche skupic..)
-
8. Data: 2014-01-18 23:11:50
Temat: Re: generowanie programow
Od: A.L. <a...@a...com>
On Sat, 18 Jan 2014 00:12:33 -0800 (PST), g...@g...com
wrote:
>W dniu sobota, 18 stycznia 2014 03:35:48 UTC+1 użytkownik A. L. napisał:
>> On Fri, 17 Jan 2014 15:01:54 -0800 (PST), g...@g...com
>> wrote:
>>
>>
>> >Bardzo ladne wystapienie Daniela Friedmana
>> >i Williama Byrda wprowadzajace w system do
>> >programowania w logice "kanren" dla Scheme'u.
>> >Polecam obejrzenie przynajmniej pierwszych
>> >20 minut, bo to, co sie dzieje w 20-tej minucie,
>> >robi wielkie wrazenie :]
>> >
>> >http://www.youtube.com/watch?v=fHK-uS-Iedc
>> >
>> >Mowiac w skrocie: autorzy najpierw pokazuja,
>> >w jaki sposob mozna przepisac program napisany
>> >w stylu funkcyjnym na "program w logice"
>> >(poprzez dopisanie dodatkowego argumentu,
>> >majacego reprezentowac wynik),
>>
>>
>> A co to ma wspolnego z "programwoaniem w logice"?...To, cytuje:
>w jaki sposob mozna przepisac program napisany
> >w stylu funkcyjnym na "program w logice"
> >(poprzez dopisanie dodatkowego argumentu,
> >majacego reprezentowac wynik),
Chodzi o to w jaki sposob "dopisanie argumentu" nagle powoduje ze mamy
"program w logice"
A.L.
-
9. Data: 2014-01-18 23:36:27
Temat: Re: generowanie programow
Od: A.L. <a...@a...com>
On Sat, 18 Jan 2014 00:47:20 -0800 (PST), g...@g...com
wrote:
>W dniu sobota, 18 stycznia 2014 09:12:33 UTC+1 użytkownik g...@g...com
napisał:
>
>> > >Mowiac w skrocie: autorzy najpierw pokazuja,
>> > >w jaki sposob mozna przepisac program napisany
>> > >w stylu funkcyjnym na "program w logice"
>> > >(poprzez dopisanie dodatkowego argumentu,
>> > >majacego reprezentowac wynik),
>> >
>> >
>>
>> > A co to ma wspolnego z "programwoaniem w logice"?...
>>
>> Co co ma wspolnego z programowaniem w logice?
>
>Pozwole sobie zagdywac, jaka byla intencja za tym
>dosc lakonicznie sformulowanym pytanie.
>Otoz z punktu widzenia logiki funkcja to relacja
>roznowartosciowa pomiedzy dwoma zbiorami. Mowiac
>scisle, powiemy, ze F jest funkcja wtw
>dla kazdego x istnieje dokladnie jedno y takie,
>ze F(x,y), albo jeszcze inaczej, ze dla kazdego x
>istnieje takie y, ze F(x,y) i dla kazdego z, jesli
>F(x,z) to y=z.
>
>Mozemy wowczas pisac y = f(x).
>
>Podstawowa idea programow napisanych w stylu
>funkcyjnym jest taka, ze procedury realizuja
>funkcje, czyli ze procedura wywolana z tymi
>samymi argumentami zawsze zwroci taki sam
>wynik.
>
>Dodatkowo programy napisane w stylu funkcyjnym
>unikaja przypisan i petli, a zamiast nich
>stosuja rekursje.
>
>Systemy do programowania w logice nie pozwalaja
>w ogole definiowac procedur, a jedynie predykaty.
>Poza tym dziela z programami funkcyjnymi te
>wlasnosc, ze nie dopuszczaja przepisan.
>
>Majac dana funkcje y=f(x), musimy stworzyc predykat
>F(x,y) taki, ze F(x,y) <=> y=f(x). Na tym wlasnie
>polega przejscie od programu funkcyjnego do programu
>w logice.
>
>Na pozor mogloby sie wydawac, ze to przejscie
>jest trywialne, bo w jezyku funkcyjnym wystarczyloby
>zdefiniowac
>
>F(x,y) =df y=f(x)
>
>i chociaz w sensie warunkow prawdziwosci jest ok, to
>jednak systemy do programowania w logice nie zajmuja
>sie tylko badaniem prawdziwosci, ale przede wszystkim
>dostarczaniem zbiorow rozwiazan spelniajacych okreslone
>warunki. Dlatego chcac uzyskac logiczna wersje definicji
>programu funkcyjnego, nalezy jeszcze zastapic operator
>porownania operatorem unifikacji i wykonac pare innych
>zabiegow (a w szczegolnosci oczywiscie zastapic wywolania
>rekurencyjne f odwolaniami do F)
>
>Mam nadzieje, ze to odpowiada na Twoje pytanie.
Tak.
To co napiales pozyzej to komplenta bzdura
A.L.
-
10. Data: 2014-01-19 02:02:25
Temat: Re: generowanie programow
Od: g...@g...com
W dniu sobota, 18 stycznia 2014 23:36:27 UTC+1 użytkownik A. L. napisał:
> >Mam nadzieje, ze to odpowiada na Twoje pytanie.
>
> Tak.
>
> To co napiales pozyzej to komplenta bzdura
W jakim sensie jest to kompletna bzdura?
Albo: co z tego, co napisalem, jest kompletna bzdura
i dlaczego?
Rzecz w tym, ze odpowiedzi w rodzaju takich, ktore
mi udzielasz (np. "to jest kompletna bzdura", albo
"Gosciu, czy ty kiedys programwoales profesjonalnie,
czy tylk oze sluchu?") nie sa dla mnie szczegolnie
informatywne, i jezeli masz odpowiadac w taki sposob,
to rownie dobrze mozesz darowac sobie wypowiedz.
Nie interesuja mnie stwierdzenia, za ktorymi nie
stoja jakies wyjasnienia czy argumenty, poniewaz
cel wypowiadania takich stwierdzen raczej nie jest
merytoryczny, tylko erystyczny.
Dla mnie sens tego, co napisalem, wydaje sie
dosc oczywisty. Moze warto by to bylo zilustrowac
przykladem. Zeby nie szukac daleko, posluze sie tym
pochodzacym od autorow prezentacji.
Funkcyjna, rekurencyjna definicja funkcji "append"
w lispie, sklejajaca ze soba dwie listy, wyglada
nastepujaco
(define (append l s)
(cond
((null? l) s)
(else (cons (car l) (append (cdr l) s)))))
na przyklad
(append '(1 2 3) '(4 5)) zwroci (1 2 3 4 5)
Funkcje te mozna przepisac do systemu programowania
w logice "kanren" wedlug zarysowanej powyzej metody,
uzyskujac nastepujacy kod:
(define (appendo l s out)
(conde
((== '() l) (== s out))
((fresh (a d res)
(== `(,a . ,d) l)
(== `(,a . ,res) out)
(appendo d s res)))))
gdzie == jest operatorem unifikacji, fresh sluzy
do wprowadzania nowych zmiennych, zas conde jest
kanrenowym odpowiednikiem operatora cond.
Nie przedstawiam tutaj szczegolowo semantyki
kanrena, bo po pierwsze sam jej dobrze nie znam,
a po drugie caly proces jest wyjasniony w prezentacji.
Istotne jest to, ze majac tak zdefiniowana funkcje,
mozna uruchomic ja w kanrenowym unifikatorze, w
nastepujace sposoby:
(run* (q) (appendo '(a b c) '(d e) q))
zwroci
(a b c d e)
ale rowniez mozna unifikowac "od tylu":
(run* (q) (appendo '(a b c) q '(a b c d e)))
da nam
(d e)
itd.
Skladnia moze nie jest tak elegancka, jak
w prologu, poniewaz unifikacja jest dokonywana
w jawny sposob, ale dla osoby znajacej podstawy
lispa sens powinien byc mniej wiecej do
uchwycenia, nawet jesli moze miec klopot
ze szczegolami.
[...] przepisac program napisany
> > >w stylu funkcyjnym na "program w logice"
> > >(poprzez dopisanie dodatkowego argumentu,
> > >majacego reprezentowac wynik),
>
> Chodzi o to w jaki sposob "dopisanie argumentu"
> nagle powoduje ze mamy "program w logice"
OK, rozumiem, o co chodzi. Jezeli idzie o to
wyjasnienie, to oczywiscie dopisanie dodatkowego
argumentu nie jest warunkiem dostatecznym, ale jest
(dla przyjetej przez autorow metody) warunkiem
koniecznym. Nie opisywalem tego procesu w calosci,
poniewaz to jest zawarte w prezentacji, zas moim
celem bylo jedynie zarysowanie tego, co tam sie
dzieje, zeby grupowicze mogli ocenic, czy temat
jest dla nich interesujacy, i ewentualnie obejrzec.
Jezeli dla Ciebie nie jest, to ja nie mam z tym
problemu.