13 października 2010

Logika na listach

Poczytałem sobie książkę o programowaniu na listach, dokładniej o języku LISP. Podejście niestandardowe, dosyć bliskie moim zachciankom. Zacząłem testować to podejście w praktyce i zaczęło się!
Przebudowanie funkcji, które zmieniają się dynamicznie w czasie działania programu - zapewnione niemalże gratis. Mogą nawet powstawać i być usuwanymi. Zwrot wielu wartości naraz, przepraszam, co znaczy wartość. Wszystko, co jest umieszczone na listach istnieje, niepotrzebna im jakaś tam wartość. Ona może co najwyżej służyć jako dodatkowe pole.

Zajrzałem do zwykłej logiki z tym podejściem. Dowód formalny, zwłaszcza twierdzenie o dedukcji upraszcza się tak bardzo, że po wprowadzeniu listy założeń i ich przebudowie za pomocą reguły odrywania nie ma co robić. Wystarczy tylko sprawdzić, czy wyrażenie dowodzone znajduje się na liście.
I dodatkowa niespodzianka, kiedy wyrażenie musi korzystać z jakiegoś dodatkowego założenia o przestrzeni, lista wskaże tylko wszystkie prawdziwe przypadki!
Przy dowodzie prawa Dunsa Scota mam założone tylko istnienie oraz brak jednego zdania. Nie dowiodę innego, chyba... że przestrzeń jest zupełna, oraz prawda i fałsz są jedynymi możliwościami! Słowem rewelacja. Od razu wykryte ukryte założenia, o których normalnie się nie wspomina. Konstruktywizm w pełnej krasie. Na razie to pierwsze spojrzenie, ale im wiecej wzorów dowodzę w ten sposób, tym bardziej mi się to podoba.

18 sierpnia 2010

Przyszle cele programistyczne

Czytałem ostatnio kilka pozycji o programowaniu strukturalnym. Podejście obiektowe daje potężnego kopniaka programistycznego. Ale to jeszcze nie to. Powoli koryguję swój własny styl programowania - pod DOSem lub Linuxem. Windows, a tak, wyglądam czasem przez nie, popatrzeć np. na ogródek.

W styczniowym SDJ 1/2010 jest artykuł o wywoływaniu funkcji z opóźnieniem. Idealne do gier! Największy szok to ten, że działania są obiektami, domyślnie rzeczownikami. Wchodzi programowanie sterowane zdarzeniami. Przebieg tury gry jest następujący
Wykonuję kilka pętli na strukturze kolejkopodobnej. Przebieg:
1: obiekty znajdujące się na scenie szykują 2
2: obiekty z 1 deklarują swe działania (ogólnie) tworząc 3, ewentualnie 4, są sortowane
3: posortowane obiekty z 2 uszczegóławiają swoje ruchy, modyfikując swoje atrybuty, przechodzą w stan 0 lub 1
0: obiekt ginie lub ucieka, słowem znika.
pozostałe różne od powyższych: końcowa modyfikacja atrybutów, przejście w stan 1
Pod koniec wszystkie obiekty (stan 1) udają się do następnej tury.

Testowałem ten przebieg, kiedy nie było prądu. Najmocniejszą cechą jest ta, że jestem w stanie uzyskać łatwym kosztem nieoznaczoność w sposób deterministyczny!

02 sierpnia 2010

Recepty numeryczne

W czssie wolnym wzialem na tapete metody numeryczne pisane przez informatykow dla matematykow. By sprawdzic dzialanie i dopasowac do mojego stylu programowania. I niespodzianka. Juz pierwsza recepta na rozwiazywanie ukladow rownan wedlug Gaussa zawiodla, majac blad w czasie pracy.
Recepty byly testowane i rozwijane przez 30 lat. Mam ochote przejsc na wlasne klasy. Przynajmniej bede wiedzial bez sprawdzania,ze nie zawsze dzialaja :) Chyba, ze napisze je bardzo dobrze, a system pozwoli je uruchamiac.

09 czerwca 2010

Robaki komputerowe

Zakupilem ksiazke Andreasa Zellera Why programs fall, w ktorej podaje on za Raymond (1996) bardziej specyficzne nazwy robakow komputerowych.
Bohrbug - wystepujacy przy dobrze zdefiniowanym, nieznanym stanie programu (z mechaniki kwantowej;
Heisenbug - pojawia sie lub znika podczas prob zlokalizowania go (zasada nieoznaczonosci Heisenberga);
Mandelbug - wykazuje zachowanie niedertemistyczne, a moze chaotyczne z powodu swej budowy traktowanej jako zlozone (zbior Mandelbrota);
Shroedinbug - nie pojawia sie przy normalnym, uzytkowniku, lecz wtedy, gdy ktos uzywa programu w niezwykly sposob (kot Shroedingera).

Shroedinbug chyba bedzie moim ulubionym robakiem, sam czasem tak dzialam :)

15 marca 2010

kapelusz magika w programowaniu

Programuje konwersje ciagu na drzewo. Bezposrednio do tablicy nie zadzialalo. Na standardowe drzewo (obiekt i wezly na podrzewa wg Sedgewicka) maja piekny efekt uboczny.
operator przypisania wykorzystuje nastepujaca funkcje:
[cope=cpp]
int Tree :: mul(Node ** ten, const Node * h) {
*ten = new Node(h->item);
if(h->f1) mul( &( ( *ten )->f1 ), h->f1 );
else (*ten)->f1 =0;
if(h->f2) mul( &((*ten)->f2), h->f2 );
else (*ten)->f2=0;
return 0;
}
[\code]
I teraz zmienna Tree ten ustawiam, odkladam na stos, kasuje by dostarczyc nowe wezly, a pozniej ze stosu zdejmuje: nowa wartosc. Innymi slowy - na stos klade krolika, a zdejmuje wrobla.
Nawet bez magicznego kapelusza!

19 lutego 2010

ONP a drzewa prefiksowe

Algorytm konstrukcji Odwrotnej Notacji Polskiej Łukasiewicza moze posluzyc do konstrukcji zapisu prefiksowego drzew binarnych. Standardowo roznica jest taka, ze drzewo zbudowane z ONP ma opuszczone wezly o tym samym priorytecie.

Zatem algorytm konstrukcji drzewa prefiksowego:
- stale o priorytecie 0 sa odkladane bezposrednio na wyjscie,
- dopoki priorytet jest wiekszy lub rowny od operatora na stosie, operator ten jest odkladany na wyjscie (roznica - w ONP pierwszy odkladany, petla dla priorytetow ostro wiekszych)
- operator o priorytecie wiekszym od operatora stosowego jest odkladany na stos,
- na zakonczenie operatory ze stosu ida na wyjscie.

Nawiasy bez zmian.

19 stycznia 2010

Odkrycie IBEX

Pare miesiecy temu dokonano odkrycia wstegi czastek neutralnych. Pojawila sie praca Heerikhuisena to tlumaczaca, lecz dla duzych energii maja 3-krotnie za malo energii.
A co ze Sloncem? Juz kilka miliardow lat promieniuje, podobnie inne gwiazdy. Chyba mechanizm Czechowskiego rozpedzania jonow pod wplywem pola magnetycznego dziala tez dla atomow. Zwlaszcza, ze w chemii istnieje mechanizm harpunowy, przy ktorym atom neutralny zachowuje sie jak dipol magnetyczny. Nie ma tu mowy o standardowym momencie magnetycznym atomow, lecz o wzbudzaniu.
Swoja droga. Tablice entalpii sa tylko dla atomow w stanie podstawowym, atomy wzbudzone nie sa rozpatrywane. Chyba przy Ziemi jest troche za gesto na wzbudzenia.