Pierwsza uwaga, że '()
i ()
są równoważne, ponieważ lista jest pusta siebie oceny i równe NIL
, aw każdym razie nie trzeba w tych LET ponieważ NIL
jest implikowane przez składnię `(let (variable) ...), co jest powodem, dla którego potrzebujesz nawiasu wokół każdego wiązania podczas podawania wartości początkowej.
Niewykonanie tego przy pomocy LET
jest konieczne w tym przypadku. Korzystanie LOOP możliwości szerzej tej funkcji można zapisać jako:
(defun unzip (seq)
"Takes an even-length list and breaks it apart by evens/odd index"
(loop for n from 0
for element in seq
if (oddp n)
collect element into oddresult
else
collect element into evenresult
finally (return (list oddresult evenresult))))
Osobiście wolę iterate dla większości iteracji, przy użyciu których można zapisać jako:
(defun unzip (seq)
"Takes an even-length list and breaks it apart by evens/odd index"
(iter (for element in seq)
(for n from 0)
(if (oddp n)
(collect element into oddresult)
(collect element into evenresult))
(finally (return (list oddresult evenresult)))))
lub nawet:
(defun unzip (seq)
"Takes an even-length list and breaks it apart by evens/odd index"
(iter (generate element in seq)
(collect (next element) into evenresult)
(collect (next element) into oddresult)
(finally (return (list oddresult evenresult)))))
EDYCJA: Dodatkowe uwagi: Nazwa unzip
tradycyjnie oznacza nieco inną funkcję. Nazwa argumentu powinna być w rzeczywistości list
, ponieważ seq
sugerowałaby, że funkcja pobiera także wektory. Chociaż możliwe jest posiadanie funkcji działających na uogólnionych sekwencjach, zwykle nie jest to zalecane, ponieważ listy i wektory mają różne charakterystyki wydajności. W szczególności, losowy dostęp przez NTH
jest liniowy dla list, co oznacza, że prawie nigdy nie należy go używać. Nawet jeśli koszt czasu jest nieistotny, zwykle oznacza to, że powinieneś używać innej bazy danych.
Nie byłoby uprzejmy drażnić ktoś o ich wymowie w wymowie. –
Lisp przypomina mi starożytną grekę, gdzie nie ma prawdziwej użyteczności (poza Emacsem), tylko kilka osób potrafi posługiwać się językiem, a jednocześnie ci sami ludzie, najbardziej wykształceni, lubią o tym rozmawiać i jego styl przez wiele godzin :-) –
@ ring0: W każdym języku programowania istnieje idiom i odpowiedni styl, a są osoby zainteresowane nauką i dyskusją. Istnieje nawet neologizm - "pytoniczny". –