FreeSource : AltLinux/Sisyphus/Alterator/synonym

Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

Scheme: велопипеды и синонимы


Очень часто вместо одной функции можно использовать другие, иногда это бывает полезно.
Например во многих случаях программа начинает быстрее работать.

Сначала коллекция из srfi-1

Вариант 1 Вариант 2
not + pair not-pair
car + last-pair last
fold + reverse fold-right
list-tail drop, а заодно есть и take.
(delq #f)+ map  filter-map
apply + append + map append-map
apply + append concatenate
contatenate+ map  append-map

Ну и несколько заметок про стандартный R5RS

Вариант 1 Вариант 2
(= x 0) (zero? x)
(> x 0) (positive? x)
(< x 0) (negative? x)
(lambda(x) x) values
(list->vector x) (apply vector x)
(and (< a b) (b c)) (< a b c)

Просто рекомендации:

Очень полезно бывает скрывать некоторые «склеивающие» операции внутри функции – выглядеть будет гораздо нагляднее.
Например, (my-url «/aaa» «/bbb» “ccc”) выглядит гораздо понятнее, чем (my-url (string-append «/aaaa” «/bbb” «ccc)).


Опасные моменты

fold-left – это итеративный процесс, но fold-right – рекурсивный, соотв., на больших списках может закончится стек.