Scheme/synonym: различия между версиями
< Scheme
Строка 4: | Строка 4: | ||
Например во многих случаях программа начинает быстрее работать. | Например во многих случаях программа начинает быстрее работать. | ||
'''"Велосипеды" из SRFI-1''' | |||
{| class="standard" | {| class="standard" | ||
Строка 53: | Строка 53: | ||
'''"Велосипеды" из R5RS''' | |||
{| class="standard" | {| class="standard" | ||
Строка 92: | Строка 92: | ||
'''Полезные рекомендации''' | |||
*Очень полезно бывает скрывать некоторые "склеивающие" операции внутри функции - выглядеть будет гораздо нагляднее. | |||
Очень полезно бывает скрывать некоторые "склеивающие" операции внутри функции - выглядеть будет гораздо нагляднее. | Например, (my-url "/aaa" "/bbb" "ccc") гораздо понятнее, чем (my-url (string-append "/aaaa" "/bbb" "ccc)). | ||
Например, (my-url "/aaa" "/bbb" "ccc") | |||
'''Опасные моменты''' | '''Опасные моменты''' | ||
*'''fold-left''' - это итеративный процесс, но '''fold-right''' - рекурсивный, соотв. , на больших списках может закончится стек. | *'''fold-left''' - это итеративный процесс, но '''fold-right''' - рекурсивный, соотв. , на больших списках может закончится стек. |
Версия от 18:05, 31 июля 2008
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 - рекурсивный, соотв. , на больших списках может закончится стек.