Scheme/synonym

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

< Scheme(Различия между версиями)
Перейти к: навигация, поиск
(Синонимы и велосипеды)
м (+category)
 
(4 промежуточные версии не показаны)
Строка 1: Строка 1:
 +
[[category:scheme]]
==Синонимы и велосипеды==
==Синонимы и велосипеды==
Строка 11: Строка 12:
!Вариант 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
 +
|-
|}
|}
Строка 88: Строка 76:
|-
|-
|
|
-
(and (< a b) (b c))
+
(and (< a b) (<b c))
|
|
(< a b c)
(< a b c)
Строка 100: Строка 88:
'''Опасные моменты'''
'''Опасные моменты'''
-
*'''fold-left''' - это итеративный процесс, но '''fold-right''' - рекурсивный, соотв. , на больших списках может закончится стек.
+
*'''fold-left''' - это итеративный процесс, но '''fold-right''' - рекурсивный, соотв., на больших списках может закончиться стек.

Текущая версия на 08:52, 21 июня 2016

Синонимы и велосипеды

Очень часто вместо одной функции можно использовать другие, иногда это бывает полезно. Например во многих случаях программа начинает быстрее работать.

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