Scheme/synonym: различия между версиями
< Scheme
Строка 11: | Строка 11: | ||
!Вариант 2 | !Вариант 2 | ||
|- | |- | ||
| | |not + pair | ||
not + pair | |not-pair | ||
| | |||
not-pair | |||
|- | |- | ||
| | |car + last-pair | ||
car + last-pair | |last | ||
| | |||
last | |||
|- | |- | ||
| | |fold + reverse | ||
fold + reverse | |fold-right | ||
| | |||
fold-right | |||
|- | |- | ||
| | |list-tail | ||
list-tail | |drop, а заодно есть и take. | ||
| | |||
drop, а заодно есть и take. | |||
|- | |- | ||
| | |(delq #f)+ map | ||
(delq #f)+ map | |filter-map | ||
| | |||
filter-map | |||
|- | |- | ||
| | |apply + append + map | ||
apply + append + map | |append-map | ||
| | |||
append-map | |||
|- | |- | ||
| | |apply + append | ||
apply + append | |concatenate | ||
| | |||
concatenate | |||
|- | |- | ||
| | | | ||
contatenate+ map | contatenate+ map | ||
| | |append-map | ||
append-map | |- | ||
|apply+string-append | |apply+string-append | ||
|string-concatenate | |string-concatenate | ||
|- | |||
|} | |} | ||
Версия от 14:35, 1 августа 2008
Синонимы и велосипеды
Очень часто вместо одной функции можно использовать другие, иногда это бывает полезно. Например во многих случаях программа начинает быстрее работать.
"Велосипеды" из 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 - рекурсивный, соотв. , на больших списках может закончится стек.