Scheme/synonym

Материал из ALT Linux Wiki
< Scheme
Версия от 19:00, 28 июля 2008; StanislavIevlev (обсуждение | вклад) (Import from freesource.info)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с 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 - рекурсивный, соотв. , на больших списках может закончится стек.