Recent Changes · Search:

Functional Programming

Type Inference

Toss

  • (incorporates former Speagram)

Emacs

Kurs Pascala

Artificial General Intelligence

AI:

Algorithmic Game Theory: Prediction Markets (po polsku)

Programming in Java

kurs pracy w systemie Linux

Evolutionary Algorithms

Animation

Data Stores and Data Mining

Language Understanding

Systemy Inteligentnych Agentów

Przetwarzanie Języka Naturalnego

Programowanie Funkcjonalne

PmWiki

pmwiki.org

add user

edit SideBar

ProgFun.Gorliwe History

Hide minor edits - Show changes to output

January 10, 2007, at 01:16 AM by 83.27.149.188 -
Changed lines 9-10 from:
let t = format (int $$ lit s $$ int);;
t 5 7;;
to:
let t = format (int $$ lit s $$ int) 5;;
t 7;;
Changed line 12 from:
t 5 7;;
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))) ""@]. 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.
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.
January 10, 2007, at 12:56 AM by 83.27.149.188 -
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 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.
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.
January 10, 2007, at 12:55 AM by 83.27.149.188 -
Changed lines 1-15 from:
Powiedzmy, że rozwiązując zadanie
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.
January 10, 2007, at 12:31 AM by 83.27.149.188 -
Added line 1:
Powiedzmy, że rozwiązując zadanie
Edit · History · Print · Recent Changes · Search · Links
Page last modified on January 10, 2007, at 01:16 AM