Rozważam z czysto teoretycznego punktu widzenia:
- mam zapisać stan terminujący (koniec)
I teraz zastanawiam się lepszą funkcją do jej opisu jest:
- funkcja stała
- funkcja liniowa
- funkcja zbieżna
Z góry dziękuję za pomoc i porady.
Rozważam z czysto teoretycznego punktu widzenia:
I teraz zastanawiam się lepszą funkcją do jej opisu jest:
Z góry dziękuję za pomoc i porady.
lion137 napisał(a):
Trochę więcej kontekstu?
Potrzebuję opisać funkcję terminującą program na potrzeby programowania funkcyjnego. To jest w opisie.
Funkcja stała: nie interesuje mnie za dużo, daję,
exit(0)
i narka. Może funkcja liniowa, bo chcę zwrócić stan licznika, (counter
liniowa inkrementacja)? Zbieżna, stan jakiegoś algorytmu, bazy...?
Przecież powyższe nie ma nic wspólnego z programowaniem funkcyjnym. Myślałem nad funkcją stałą ale przecież to położy program zaraz po wstaniu. Funkcja liniowa to przecież to samo tylko znamy moment. Trzecia opcja wydaje się być najciekawszą ale zastanawiam się czy w ogóle się odpali.
Ok, niech będzie funkcyjne.
Myślałem nad funkcją stałą ale przecież to położy program zaraz po wstaniu
To jest dla mnie niejasne, bo funkcja stała to funkcja która celuje do jednego punktu dziedziny, więc czemu miałaby położyć program zaraz po wstaniu; mógłbyś podac konkretny przykład kodu?
lion137 napisał(a):
To jest dla mnie niejasne, bo funkcja stała to funkcja która celuje do jednego punktu dziedziny, więc czemu miałaby położyć program zaraz po wstaniu; mógłbyś podac konkretny przykład kodu?
To jest bardzo proste - jeśli mamy jakiekolwiek złożenie funkcji z których jedna zawsze zwraca wartość stałą dla całego spektrum argumentów to cały program można uprościć do tej jednej wartości.
lion137 napisał(a):
Wcale nie, bo możesz wołać jakąś funkcję warunkowo; ale, to prowadzi donikąd, podaj jakiś usecase,
W paradygmacie funkcyjnym często jest podnoszone że łatwo da się zweryfikować przejścia stanów w aplikacji oraz optymalizować takie przejścia z powodu braku side-effects poszczególnych funkcji. Ja chcę po prostu dowiedzieć się czy mój program prawidłowo się zakończy i jak to zapisać formalnie.
kawałek kodu w systemie.
Przecież wyraźnie napisałem że rozważam czystą teorię
Bardzo mało kontekstu, więc trudno powiedzieć. Mi to brzmi jak przepadek bardziej dla jakiejś monady niż funkcji. Po prostu masz ciąg funkcji jaki chcesz i one działają na monadzie rozrózniające stany: Nothing, InProgress x i Finished x. Jeśli jest Finished x to każda funkcja po prostu pcha wynik dalej.
elwis napisał(a):
Bardzo mało kontekstu, więc trudno powiedzieć. Mi to brzmi jak przepadek bardziej dla jakiejś monady niż funkcji. Po prostu masz ciąg funkcji jaki chcesz i one działają na monadzie rozrózniające stany: Nothing, InProgress x i Finished x.
Czyli funkcję końca najlepiej opisać monadą?
EDIT:
Jeśli jest Finished x to każda funkcja po prostu pcha wynik dalej.
Chociaż dla mnie to wskazuje na funkcję stałą - operacje na monadzie z finished zawsze prowadzą do wyjścia.
lion137 napisał(a):
A jakaś customowa monada?
Co masz na myśli? Wolę ogólne rozwiązania - zwłaszcza że wydaje mi się że problem końca nie jest jakimś egzotycznym wymaganiem.