Scheme: Różnice pomiędzy wersjami

Dodane 198 bajtów ,  2 lata temu
m
Bot: Dodanie tytułów do linków w przypisach (patrz FAQ); zmiany kosmetyczne
m (drobne techniczne)
m (Bot: Dodanie tytułów do linków w przypisach (patrz FAQ); zmiany kosmetyczne)
(lambda (n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1)) (fib (- n 2)))))))
 
(define sum
(lambda (x)
(cond ((null? x) 0)
(else (+ (car x) (sum (cdr x)))))))
 
(fact 14)
1)))
`(let ,iter ((,(car params) ,(cadr params)))
(if (<= ,(car params) ,(caddr params))
(begin
,@body
(,iter (+ ,(car params) ,step)))))))
(let ((iter (gensym)) (list (gensym)))
`(let ,iter ((,(car params) (car ,(cadr params)))
(,list (cdr ,(cadr params))))
(when (not (null? ,(car params)))
,@body)
(when (not (null? ,list))
(,iter (car ,list) (cdr ,list))))))
 
</syntaxhighlight>
 
Kontynuacje wykorzystywane są by nadać wrażenie synchroniczności typowo asynchronicznym operacjom takim jak np. zapytania HTTP<ref>http://www.cs.brown.edu/~sk/Publications/Papers/Published/khmgpf-impl-use-plt-web-server-journal/paper.pdf</ref>. Niestety, przez obecność kontynuacji jako typ danych pierwszej klasy w Scheme nie jest możliwe orzeknięcie czy dany blok kodu będzie jeszcze wywoływany, komplikując zamykanie zasobów takich jak deskryptory plików i inne [[Uchwyt (informatyka)|uchwyty]]<ref>[{{Cytuj | url=http://www.nhplace.com/kent/PFAQ/unwind-protect-vs-continuations-original.html | tytuł=KMP's PFAQ: UNWIND-PROTECT vs Continuations (page 3)<!-- Tytuł wygenerowany przez bota -->] | opublikowany=www.nhplace.com | data dostępu=2017-11-26}}</ref>.
 
=== I/O ===
(let ((line ""))
(let loop ((result '()))
(set! line (read-line file))
(if (eof-object? line)
result
(loop (append result (list line)))))))))
</syntaxhighlight>
Funkcja zapisująca listę stringów do pliku
(let loop ((list list))
(unless (null? list)
(write-line (car list) port)
(loop (cdr list)))))
; unless to jest macro
(define-macro (unless test . body)
 
=== Standard IEEE i raport R<sup>n</sup>RS ===
Język Scheme opisany jest w dwóch dokumentach<ref>[{{Cytuj | url=http://schemers.org/Documents/Standards/ | tytuł=schemers.org: Documents: Standards<!-- Tytuł wygenerowany przez bota -->] | opublikowany=schemers.org | data dostępu=2017-11-26}}</ref>:
* standard organizacji IEEE (The IEEE standard, 1178-1990 (R1995))
* raport R<sup>6</sup>RS (Revised<sup>6</sup> Report on the Algorithmic Language Scheme), szósta wersja dokumentu R<sup>n</sup>RS
 
=== Dokumenty SRFI ===
Dokumenty zgłoszone i przyjęte w procesie SRFI<ref>[{{Cytuj | url=http://srfi.schemers.org/ | tytuł=Scheme Requests for Implementation<!-- Tytuł wygenerowany przez bota -->] | opublikowany=srfi.schemers.org | data dostępu=2017-11-26}}</ref>są sposobem na w miarę szybkie wprowadzanie przenośnych między implementacjami języka rozwiązań ułatwiających tworzenie programów. Obecnie istnieje około 60 dokumentów SRFI, opisują one sposób zaimplementowania takich funkcji czy rozwiązań jak np. sposób notacji tablic, strumienie, obsługa wyjątków, higieniczne makra, wykonywanie skryptów języka Scheme w systemach operacyjnych UNIX czy obsługa wielowątkowości. Rozwiązania te nie wchodzą w skład oficjalnej definicji języka, jednak mogą być brane pod uwagę przy tworzeniu kolejnych wersji raportu R<sup>n</sup>RS.
 
=== Implementacje ===
2 588 861

edycji