cwbe coordinatez:
101
63540
2076399
3671716

ABSOLUT
KYBERIA
permissions
you: r,
system: public
net: yes

neurons

stats|by_visit|by_K
source
tiamat
K|my_K|given_K
last
commanders
polls

total descendants::
total children::72
14 ❤️


show[ 2 | 3] flat


aarin0
maniac1
k_[uz_vsetko...1
pink-fu1
VitaminC1
Kuzmics1
dno1
G1
Abe1
visby1
soc1
ulkas1
repelent1
ziman1
phoenyx1
1
kiwo1
fero1
ea1
Mr. Darcy1
just_minding...1
jurov1
maaca2
hexo2
Indalam2
risko2
shady3
afross4
wq4
Quentin4
XcomeX4
mateno5
k0fein5
blurec5
urza6
s76
ksyz6
pyxel6
borg6
azazel_the_r...6
Mito6
stick7
soonic9
icyak9
C9
darmozrac9
vygidor9
Ywettka10
tlamer11
hm13
-sXero-15
jinx16
fefo16
vicdar3n16
chelly18
lupus yonderboy18
83120
paskudnyk20
grzegorz brz...21
siddharta[Lo...26
jaRo30
skurva.30
piece_of_IT33
goldenslumbers40
mono42
daan44
teflon45
smrtak46
coffee56
Tweety58
nacks60
plachta64
A.boy65
Neprocedurálne programovanie
Fórum určené na výmenu vedomostí, skúseností, zaujímavostí, tipov a trikov týkajúcich sa neprocedurálneho/deklaratívneho programovania a príslušných jazykov.


lisp_cycles.png

Čo je neprocedurálne programovanie alias stručný náznak špičky ľadovca
Neprocedurálne programovanie, inak nazývané aj deklaratívnym, sa nesústreďuje na postupnosť krokov, ako sa dorátať k výsledku, skôr vymenúva vzťahy a fakty, na základe ktorých počítač "sám" odvodí výsledok. Nepozná pojem premennej v zmysle kusa pamäte, nepoužíva priraďovací príkaz (pretože nepozná premenné). Jeho hlavným nástrojom býva rekurzia.

Predstavme si, že máme zadanú nejakú úlohu, napríklad vypočítať n-té Fibonnacciho číslo. Klasický procedurálny prístup by bol nasledovný:

function fib(n)
begin
  (a, b) = (0, 1)
  for i in [1..n] do (a, b) = (b, a+b)
  return a
end

Čítame: Vyhraď si premenné a, b, inicializuj ich. n-krát prepíš premenné a, b (nejako) vypočítanými hodnotami. V premennej a máš výsledok.

V Prologu by to vyzeralo inak:

fib(1, 1).
fib(2, 1).
fib(N, F) :-
  N > 2,
  pred(N, N1, N2),
  fib(N1, FN1),
  fib(N2, FN2),
  F is FN1 + FN2.
pred(N, N1, N2) :-
  N1 is N - 1,
  N2 is N - 2.

Čítame: Prvé Fibonnacciho číslo je jedna. Druhé Fibonnacciho číslo je jedna. N-té Fibonnacciho číslo je F, ak N je väčšie než dva, predchodcami N sú N1, N2, príslušné prvky postupnosti sú FN1, FN2 a F je FN1+FN2. N1 a N2 sú predchodcami čísla N, ak N1 je N-1 a N2 je N-2.

Funkcionálny jazyk Haskell je ešte priamočiarejší:

fib 1 = 1
fib 2 = 1
fib n = fib (n-1) + fib (n-2)

Podstatou teda je, že neprocedurálnym jazykom nevravíme počítaču, aké kroky má podstúpiť pri hľadaní výsledku, ale opisujeme vzťahy, aké platia a je na ňom, aby ich vyriešil a odpovedal na položenú otázku.

Neprocedurálne programovanie je ale veľmi široká téma, vyžaduje navyše dosť odlišný pohlad na problém, preto sa tu dá len sotva niečo načrtnúť, tobôž nie vysvetliť; možné miesto, kde začať a širší pokec o neprocedurálnom (špeciálne funkcionálnom programovaní) sa dá nájsť napríklad na Haskell wiki.

Chuťovka: Quicksort v Haskelli:

qsort [] = []
qsort (x:xs) = qsort [ y | y<-xs, y < x] ++ [x] ++ qsort [ y | y <- xs, y >= x ]

Užitočné linky a zdroje
.: Tutoriály :.
A Gentle Introduction to Haskell — klasický Haskellovský tutoriál
Real World Haskell — praktický Haskell
Learn You a Haskell — veselo ilustrovaný úvod do Haskellu ;)

.: Články :.
Zipper — strom futrom von
Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire — článok o bežných rekurzívnych schémach
Algorithm + Strategy = Parallelism — Ako rozumne paralelizovať

.: Video :.
Simon Peyton-Jones — A Taste of Haskell — Dvojdielny záznam z prednášky o Haskelli spolu so slajdmi
Structure and Interpretation of Computer Programs — prednáška od dvojice pánov Hal Abelson & Gerald Jay Sussman

.: Ostatné :.
99 Prologovských, Haskellovských a Lispovských problémov, väčšina riešená
Zygohistomorfické prepromorfizmy
Project Euler — zbierka matematicko-programátorských úložiek, výborná na precvičovanie základov obzvlášť funkcionálnych jazykov

.: Spriaznené fóra :.
Scala programming language

...a ďalšie očakávam v príspevkoch :)




0000010100063540020763990367171609312283
aarin
 aarin      01.05.2026 - 15:38:29 , level: 1, UP   NEW
pouzivate niekto nejaky iversonovsky array-oriented jazyk (napr APL, BQN, J, K)? aspon pre hobby programovanie? Ja som sa k nim dostal davnejsie, ale velmi ma nelakali, no teraz som sa k nim z "praktickych" dovodov dostal - tazko sa mi v repl iteraovalo s viacriadkovymi funkciami - zacal som sa trochu ucit K a velmi mi ucaroval - aj ked som ho prakticky este velmi nepouzil.

problem je, ze uz ma to naozaj zaujmovo izoluje :), nikto v mojom okoli o tom nechce ani pocut, ked vidi, ako to vyzera :D tak skusam tu, ak ste niekto taky v bratislave, ci si nedame obcas nejaky meetup kde posharujeme co vieme a ako riesime problemy.

0000010100063540020763990367171609208182
cocteau
 cocteau      05.01.2025 - 19:24:53 [4K] , level: 1, UP   NEW
Ahojte, nenájdem tu niekoho kto by bol ochotný pomôcť synovi so základmi Haskellu? Má zápočet a nejako sa mu nedarí s tým popasovať. Ďakujem

000001010006354002076399036717160920818209208508
aarin
 aarin      07.01.2025 - 10:14:55 , level: 2, UP   NEW
mozno budem vediet pomoct ak este nie je neskoro, kludne napis detaily sukromne

000001010006354002076399036717160920818209208323
e6
 e6      06.01.2025 - 15:37:14 , level: 2, UP   NEW
Keby sa nikto nenasiel odporucam chatgpt.com

0000010100063540020763990367171609105812
aarin
 aarin      21.11.2023 - 11:27:22 (modif: 21.11.2023 - 12:21:59) [4K] , level: 1, UP   NEW !!CONTENT CHANGED!!
toto asi nespada pod neproceduralne jazyky, ale neviem kam inam to dat - interaktivny Forth tutorial.

This small ebook is here to teach you a programming language called Forth. Forth is a language unlike most others. It’s not functional or object oriented, it doesn’t have type-checking, and it basically has zero syntax. It was written in the 70s, but is still used today for certain applications.

Easy Forth

a nejaka motivacia

prijemnu zabavu :)

000001010006354002076399036717160910581209106007
ziman
 ziman      22.11.2023 - 00:26:42 , level: 2, UP   NEW
Jeden z projektov, na ktorych pracujem tieto tyzdne, je kompilator programov (teda skor EDSL) z nejakeho jednoducho typovaneho funkcionalneho jazyka do zasobnikoveho jazyka (RPL) pre HP kalkulacku. Je to cele napisane v Idrise, co je vlastne tiez on-topic tuna. :)

Rucne to pisat nechcem, RPL kod je dost write-only a potom sa s tym nic velmi neda robit. Ale mozno v pocitaci sa s tym naraba lepsie nez na displeji kalkulacky.

00000101000635400207639903671716091058120910600709106238
aarin
 aarin      22.11.2023 - 17:11:03 , level: 3, UP   NEW
to je osobny projekt, alebo pracujes v raji? :)

0000010100063540020763990367171609061003
aarin
 aarin      06.05.2023 - 07:40:15 [1K] , level: 1, UP   NEW
zacal som citat knihu purely functional data structures (free pdf) a hladal som nejaku rychlu cestu ako sa naucit Standard ML aspon tak, aby som si vedel skusat a modifikovat kod v nej. no a nasiel som Four Lectures on Standard ML co je nejake 50 stranove pdfko ktore podla mna robi super vysvetlovaciu robotu. pre niekoho kto uz pozna nejaky ML jazyk to staci preletiet.

(v tej knihe su v appendixe tie kody prelozene aj do Haskellu, ale beriem to ako prilezitost sa konecne naucit aj SML)

0000010100063540020763990367171608996607
just_minding_my_business
 just_minding_my_business      20.08.2022 - 16:34:08 , level: 1, UP   NEW
Ahoj ventyl :)
https://www.root.cz/zpravicky/teleskop-jamese-webba-pouziva-java-script/

000001010006354002076399036717160899660708996803
ulkas
 ulkas      22.08.2022 - 09:03:13 , level: 2, UP   NEW
urcite ale v nejakej mierne modifikovanej verzii a dalsej custom kniznice wow.js

00000101000635400207639903671716089966070899680308996813
just_minding_my_business
 just_minding_my_business      22.08.2022 - 09:27:25 (modif: 22.08.2022 - 09:29:13), level: 3, UP   NEW !!CONTENT CHANGED!!
Je mi jasné, že to tam nebude "your ordinary node.js" s npm a git-om bežiace ako proces vo windows 11.

0000010100063540020763990367171608996607089968030899681308996981
ulkas
 ulkas      22.08.2022 - 18:08:22 , level: 4, UP   NEW
to bola taka narazka, v praci si z toho robime prdel uz desatrocia

0000010100063540020763990367171608798096
ziman
 ziman      22.10.2020 - 19:59:28 (modif: 22.10.2020 - 20:04:07) [20K] , level: 1, UP   NEW !!CONTENT CHANGED!!
Napisal som kompilator medzi dvoma velmi neproceduralnymi jazykmi -- zdrojovym jazykom je Ever, dialekt Scheme; cielovym jazykom je Excel, ktory je este neproceduralnejsi nez Scheme.

Funguje to takto. Najskor si clovek napise program v jazyku Ever:

(define (fac acc n)
  (if-zero
    n
    acc
    (fac (* n acc) (- n 1))))

(define (main)
  (display
    (fac 1 6)))


Potom ho kompilator prelozi cez nejaky zasobnikovy bajtkod...

; -------[ main ] -------------
OP 0 (XStr "ret")
OP 0 (XInt 1)
OP 0 (XInt 6)
LOAD (Addr 3)
PUSHL (PC 8)
LOAD (Addr 2)
STORE (Addr 3)
JMP (PC 13)
LABEL (PC 8)
STORE (Addr 3)
POP 2
PRINT
HALT
; -------[ fac ] --------------
LABEL (PC 13)
OP 0 (XLoc 2)
JZ (PC 22)
OP 0 (XOp "*" (XLoc 2) (XLoc 3))
OP 0 (XOp "-" (XLoc 2) (XInt 1))
LSTORE 2
LSTORE 3
JMP (PC 13)
JMP (PC 24)
LABEL (PC 22)
OP 0 (XLoc 3)
LABEL (PC 24)
LSTORE 4
RET

...do Excelu a dostane toto:
screenshot.png

Kazda bunka obsahuje nejake magicke vzorceky, ktore nakoniec dopocitaju faktorial 6-tky a vypluju ho do laveho stlpceka.

Hlavnou vyzvou je, ze Excel je velmi-velmi neproceduralny. Neda sa proste povedat "ak X, potom zapis Y do bunky C9, inak nerob nic". Clovek musi povedat "C9 = ak X potom Y, inak C8" a zahrnut v jednom vzorci vsetky mozne pristupy z celeho programu. Cize cely program sa obrati "naruby" a miesto programovania niecoho, co pise do buniek, musi clovek naprogramovat bunky, aby samy zmenili svoju hodnotu podla toho, co vidia okolo seba. A aby to dohromady vyzeralo, akoby do nich pisal niekto zvonku.

Nuz a nazov tohto kompilatora je zaroven mottom istej Skotskej univerzity. :)

000001010006354002076399036717160879809609043183
aarin
 aarin      20.02.2023 - 10:21:36 , level: 2, UP   NEW
strasne dobre sa cita ten zdrojak, pekny Haskell

(viem po akej dobe reagujem)

00000101000635400207639903671716087980960904318309043214
ziman
 ziman      20.02.2023 - 12:14:29 , level: 3, UP   NEW
dakujem :)

000001010006354002076399036717160879809608841718
jurov
 jurov      14.02.2021 - 09:19:55 , level: 2, UP   NEW
Da sa z toho volat VBA?

...ked aj slzy placu

00000101000635400207639903671716087980960884171808841725
ziman
 ziman      14.02.2021 - 09:38:51 , level: 3, UP   NEW
https://stackoverflow.com/questions/19601630/how-to-call-vba-function-from-excel-cells/22736330#22736330

zda sa, ze pridat by to nebolo nijako tazke

000001010006354002076399036717160879809608798522
repelent
 repelent      23.10.2020 - 16:07:11 , level: 2, UP   NEW
Ten Ever je tvoj dialekt? Som sa to snazil najst a nejak sa mi nedari. Ak to mas niekde mimo ako projekt (alebo ak je to aj nieco ine), mozno do readme hod link. Alebo to existuje iba v ramci tohto projektu? :)

00000101000635400207639903671716087980960879852208798540
ziman
 ziman      23.10.2020 - 16:36:28 [2K] , level: 3, UP   NEW
to je len tento jazyk; povodne nemal ani meno, lebo nema zmysel ho pomenovavat, ale potom niekto spomenul motto nasej univerzity, tak mi doplo, ze ak pomenujem ten jazyk Ever, tak mozem pomenovat cely projekt ever-to-excel :)

000001010006354002076399036717160879809608798512
niekt0
 niekt0      23.10.2020 - 15:55:12 [1K] , level: 2, UP   NEW
fuzzer vravis?:)

00000101000635400207639903671716087980960879851208798580
ziman
 ziman      23.10.2020 - 18:41:23 [1K] , level: 3, UP   NEW
asi by sa to dalo pouzit aj tak :)

0000010100063540020763990367171608491793
jurov
 jurov      26.04.2018 - 21:17:58 (modif: 26.04.2018 - 21:18:19), level: 1, UP   NEW !!CONTENT CHANGED!!
Prečo zaraďujete lisp medzi neprocedurálne jazyky?

Ja to vnímam tak že najrozšírenejšie lispové dialekty Common Lisp aj Scheme sú procedurálne a možno voliteľne využiť funkcionálne konštrukcie (ale tie má aj Python, napríklad).

Ešte chlapča nevyrástlo, baby, berme ho!

000001010006354002076399036717160849179308785200
hexo
 hexo      16.09.2020 - 15:41:33 , level: 2, UP   NEW
tiez si myslim, ze to s naozaj funkcionalnym programovanim vela nema. je v nom ale vela inych veci, ktore ho robia specialnym. vsetky programy co som v tom zatial videl (nebolo ich az tak vela zas) boli silne proceduralne.

rovnako mi pride, ze funkcia ako "first-class" citizen prosto nestaci. musis mat zvysne veci z lambda calculu. ziadne tupe vynimky a la OCaml, ktore dlho nemalo ani operator zretazenia funkcii (bodka z haskellu), hlavne ze ma objekty :D
dobre ze si okrajovo spomenul python, ten som zvykol hodne pouzivat na mix proceduralne-objektoveho pristupu a "funkcionalnych" veci ako je map, reduce, zip a tak. jedna z veci, ktora mi tam ale neskutocne chybala je ciastocna aplikacia funkcie a curry-uncurry (to sa da kus emulovat). da sa na to odpovedat ze kniznica ponuka "partial". to je ale fakt zle pouzitelne

00000101000635400207639903671716084917930878520008795709
aarin
 aarin      17.10.2020 - 09:43:30 (modif: 17.10.2020 - 09:52:04), level: 3, UP   NEW !!CONTENT CHANGED!!
toto je velmi dobra odpoved :) ale zaujimalo by ma, co si myslel tymi vynimkami a la OCaml. ja ten jazyk vobec nepoznam, preto sa pytam.

ja pouzivam iba haskell a racket, oba su velmi ine, ale napriek tomu povazujem racket za funkcionalny programovaci jazyk [v o dost slabsom vyzname].

no a tomu chcem spravit trochu reklamu:

je to dialekt lispu, ktory je navazeny skor na fp stranu (cons je immutable - toto znamena vela - e: tu je vysvetlena logika za tym), ale oproti haskelu nema trackovanie efektov, cize viem robit nepure funkcie o ktorych sa to nedozviem inak ako citanim zdrojaku. neratam referencne netransparentne funkcie ako accursedUnutterablePerformIO co ma haskell :) v tomto ohlade je racket slabsi.

ale co je na nom super je, ze napr tu kompoziciu funkcii co spominas:


(.) :: (b -> c) -> (a -> b) -> a -> c


si velmi lahko do toho jazyka pomocou makier vies dorobit bez cakania na novu verziu [makra preto, ze si vies vytvorit syntax aku chces, nemusi to byt (. fb fa)]. rovnako definovanie curried funkcii, lazyness, atd.

rozpisal som sa, lebo prokrastinujem. chapem ze to vyzera byt trochu odveci :)

0000010100063540020763990367171608470533
azazel_the_real_one{outKasted}{outKasted}
 azazel_the_real_one{outKasted}{outKasted}      14.03.2018 - 14:03:37 [2K] , level: 1, UP   NEW
Je nejaka firma na Slovensku, co programuje v Haskelli?

000001010006354002076399036717160847053308471719
ziman
 ziman      15.03.2018 - 21:08:33 , level: 2, UP   NEW
to by ma tiez zaujimalo :)

0000010100063540020763990367171608425497
aarin
 aarin      29.11.2017 - 22:00:03 , level: 1, UP   NEW
pekny clanok o Y combinatore: http://mvanier.livejournal.com/2897.html

0000010100063540020763990367171608237356
ulkas
 ulkas      24.10.2016 - 10:42:40 , level: 1, UP   NEW
nejaka horuca novinka:
http://www.picat-lang.org/


icat is a simple, and yet powerful, logic-based multi-paradigm programming language aimed for general-purpose applications. Picat is a rule-based language, in which predicates, functions, and actors are defined with pattern-matching rules. Picat incorporates many declarative language features for better productivity of software development, including explicit non-determinism, explicit unification, functions, list comprehensions, constraints, and tabling. Picat also provides imperative language constructs, such as assignments and loops, for programming everyday things. The Picat implementation, which is based on a well-designed virtual machine and incorporates a memory manager that garbage-collects and expands the stacks and data areas when needed, is efficient and scalable. Picat can be used for not only symbolic computations, which is a traditional application domain of declarative languages, but also for scripting and modeling tasks.


Example 5: The following example models the N-queens problem by using three all_different constraints.

import cp.

queens(N, Q) =>
Q = new_list(N),
Q in 1..N,
all_different(Q),
all_different([$Q[I]-I : I in 1..N]),
all_different([$Q[I]+I : I in 1..N]),
solve([ff],Q).


0000010100063540020763990367171608150880
ziman
 ziman      17.05.2016 - 16:32:20 [1K] , level: 1, UP   NEW
:)
https://translate.google.com/#nl/en/map

0000010100063540020763990367171608055390
SYNAPSE CREATOR
 XcomeX      14.12.2015 - 21:54:46 , level: 1, UP   NEW  HARDLINK
PrSmxp5.png

...dejte o sobě vědět, kdož se pracovně,
či zcela pro vlastní zájem a potěšení s DSL potýkáte,
či obecněji meta programováním svůj životem prolínáte.

...více hlav více ví a předně se u práce více zabaví
DSL - Domain Specific Languages forum.

0000010100063540020763990367171608023951
azazel_the_real_one{outKasted}{outKasted}
 azazel_the_real_one{outKasted}{outKasted}      25.10.2015 - 23:44:06 , level: 1, UP   NEW
Otazka, aky je problem s guile, preco ho schemeri nemaju radi?

Prave si doma studujem sicp:
https://mitpress.mit.edu/sicp/full-text/book/book.html

Nemal som zatial ziadny problem.

0000010100063540020763990367171608012232
Thunder Perfect Mind
 Thunder Perfect Mind      07.10.2015 - 23:48:38 [1K] , level: 1, UP   NEW
https://colah.github.io/posts/2015-09-NN-Types-FP/





axone forumz