Scheme/synonym
< Scheme
Синонимы и велосипеды
Очень часто вместо одной функции можно использовать другие, иногда это бывает полезно. Например во многих случаях программа начинает быстрее работать.
"Велосипеды" из SRFI-1 и SRFI-13
| Вариант 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 |
| apply+string-append | string-concatenate |
"Велосипеды" из 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 - рекурсивный, соотв., на больших списках может закончиться стек.