Emacs Artificial General Intelligence Algorithmic Game Theory: Prediction Markets (po polsku) Systemy Inteligentnych Agentów
|
ProgFun.Gorliwe HistoryHide minor edits - Show changes to output Changed lines 9-10 from:
let t = format (int $$ lit s $$ int);; t to:
let t = format (int $$ lit s $$ int) 5;; t 7;; Changed line 12 from:
t to:
t 7;; Changed line 15 from:
Wbrew naszym oczekiwaniom, w obu przypadkach liczby są rozdzielone przecinkiem. Co się stało? Funkcja @@lit@@ została policzona już w momencie definicji @@t@@. Przed wywołaniem @@format@@ nie jest jeszcze nic policzone, bo złożenia [@$$@] wymagają trzech argumentów, a dostają za każdym razem dwa. Jednak @@format@@ zostaje policzony, bo dostaje wszystkie swoje argumenty tzn. jeden argument. W pierwszym kroku obliczania @@format@@ zostają policzone złożenia ([@$$@] dostaje brakujący argument): wynikiem [@pf (fun s -> s) ""@] jest [@int ((lit s) (int (fun s -> s))) ""@]. to:
Wbrew naszym oczekiwaniom, w obu przypadkach liczby są rozdzielone przecinkiem. Co się stało? Funkcja @@lit@@ została policzona już w momencie definicji @@t@@. Przed wywołaniem @@format@@ nie jest jeszcze nic policzone, bo złożenia [@$$@] wymagają trzech argumentów, a dostają za każdym razem dwa. Jednak @@format@@ zostaje policzony, bo dostaje wszystkie swoje argumenty tzn. jeden argument. W pierwszym kroku obliczania @@format@@ zostają policzone złożenia ([@$$@] dostaje brakujący argument): wynikiem [@pf (fun s -> s) ""@] jest [@int ((lit s) (int (fun s -> s))) ""@]. @@lit@@ ma w tej chwili dwa z trzech argumentów, więc ciągle nie jest policzony, podobnie @@int@@. Natomiast po "wyjściu" z @@format@@, @@int@@ dostaje trzeci argument, więc w następnym kroku jest obliczany. Krokiem pośrednim tego obliczenia jest [@((lit s) (int (fun s -> s))) "5"@]. Teraz widać, że @@lit@@ ma już wszystkie trzy argumenty, i w kolejnym kroku zostaje policzony. Changed line 15 from:
Wbrew naszym oczekiwaniom, w obu przypadkach liczby są rozdzielone przecinkiem. Co się stało? Funkcja @@lit@@ została policzona już w momencie definicji @@t@@. Przed wywołaniem @@format@@ nie jest jeszcze nic policzone, bo złożenia [@$$@] wymagają trzech argumentów, a to:
Wbrew naszym oczekiwaniom, w obu przypadkach liczby są rozdzielone przecinkiem. Co się stało? Funkcja @@lit@@ została policzona już w momencie definicji @@t@@. Przed wywołaniem @@format@@ nie jest jeszcze nic policzone, bo złożenia [@$$@] wymagają trzech argumentów, a dostają za każdym razem dwa. Jednak @@format@@ zostaje policzony, bo dostaje wszystkie swoje argumenty tzn. jeden argument. W pierwszym kroku obliczania @@format@@ zostają policzone złożenia ([@$$@] dostaje brakujący argument): wynikiem [@pf (fun s -> s) ""@] jest [@int ((lit s) (int (fun s -> s))) ""@]. Teraz liczone są argumenty pierwszego wystąpienia @@int@@, @@lit@@ ma w tej chwili dwa z trzech argumentów, więc ciągle nie jest policzony. Natomiast @@int@@ ma teraz wszystkie dwa argumenty, więc w następnym kroku jest obliczany. Krokiem pośrednim tego obliczenia jest @@cont@@ równe [@(lit s) (int (fun s -> s))@] oraz [@acc ^ (string_of_int arg)@] równe [@5@]. Teraz widać, że @@lit@@ ma już wszystkie trzy argumenty, i w kolejnym kroku zostaje policzony. Changed lines 1-15 from:
Powiedzmy, że rozwiązując to:
Powiedzmy, że rozwiązując zadanie [[(ProgFun.Zadania#)z31]] postanowiliśmy podawać "stałe" literały przez referencje, żeby można je było później zmieniać. Wykorzystanie efektów ubocznych pozwala podpatrzeć tzw. strategię obliczeń. [@ let ( $$ ) f g x = f (g x);; let lit const cont acc = cont (acc ^ !const);; let int cont acc arg = cont (acc ^ (string_of_int arg));; let format pf = pf (fun s -> s) "";; let s = ref ", ";; let t = format (int $$ lit s $$ int);; t 5 7;; s := "; ";; t 5 7;; @] Wbrew naszym oczekiwaniom, w obu przypadkach liczby są rozdzielone przecinkiem. Co się stało? Funkcja @@lit@@ została policzona już w momencie definicji @@t@@. Przed wywołaniem @@format@@ nie jest jeszcze nic policzone, bo złożenia [@$$@] wymagają trzech argumentów, a dostaje za każdym razem dwa. Jednak @@format@@ zostaje policzony, bo dostaje wszystkie swoje argumenty tzn. jeden argument. W pierwszym kroku obliczania @@format@@ zostają policzone złożenia ([@$$@] dostaje brakujący argument): wynikiem [@pf (fun s -> s) ""@] jest [@int ((lit s) (int (fun s -> s))) ""@]. Teraz liczone są argumenty pierwszego wystąpienia @@int@@, @@lit@@ ma w tej chwili dwa z trzech argumentów, więc ciągle nie jest policzony. Natomiast @@int@@ ma teraz wszystkie dwa argumenty, więc w następnym kroku jest obliczany. Krokiem pośrednim tego obliczenia jest @@cont@@ równe [@(lit s) (int (fun s -> s))@] oraz [@acc ^ (string_of_int arg)@] równe [@5@]. Teraz widać, że @@lit@@ ma już wszystkie trzy argumenty, i w kolejnym kroku zostaje policzony. |