Scheme/synonym

Материал из ALT Linux Wiki

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

Версия 15: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 - рекурсивный, соотв. , на больших списках может закончится стек.
 
Личные инструменты