2013-07-17 11 views
7

Mam listę elementów z niektórymi wartościami w nim.Jak odwzorować funkcję dwóch argumentów na listę?

Chcę zmapować go do funkcji i utworzyć listę zawierającą wartości obliczone przez zastosowanie tej funkcji dwóch argumentów do kolejnych wartości na pierwszej liście.

Ta lista będzie zawierać o jeden element mniej.

funkcja odwzorowania powinna przyjmować dwa argumenty jednocześnie.

EDIT

Przykład

funkcja dwa argumentem używam jest dość skomplikowane, więc dla uproszczenia pozwala zakładać, że jest to funkcja, która oblicza średnią z dwóch liczb.

jeśli mam listę: [3 8 11 14 19 20 88].

Czy jest możliwe dla mnie dwa napisać funkcję, która odwzorowuje mój average funkcję, która dla (average 3 8) dadzą 5.5

dla (average 8 11) da 9.5

i (average 11 14) da 12.5

i tak dalej. ..

ze stosowania średniej do dwóch kolejnych wartości z listy o godzinie ime powinna mi dać.

[5.5 9.5 12.5 16.5 19.5 54.0] 

w wyniku.

map stosuje funkcję pojedynczego argumentu do całej listy i tworzy nową listę z dokładnie taką samą liczbą elementów.

to, czego chcę, to sposób na zastosowanie mojej funkcji, która wymaga dwóch argumentów, aby wykonać dwie kolejne naraz, zastosować do niej moją funkcję i dodać wynik do nowej listy.

+0

można dodać trochę prosty przykład? –

+0

Masz na myśli redukcję (http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/reduce)? –

Odpowiedz

11

Można to zrobić na mapie:

(map f coll (rest coll)) 
+0

To działa! W jaki sposób mapa mapy przyjmuje więcej niż dwa argumenty? Jak działa mapowanie w tym przypadku? , więc wybiera jeden argument z każdej przekazanej listy? , aż jedna z końców się skończy? –

+0

', więc wybiera jeden argument z każdej przekazanej listy? do końca jednej z list? "- Dokładnie. Przekazany fn musi przyjąć tyle argumentów, ile jest seqs przekazanych do 'map'. – Alex

+0

@AmoghTalpallikar można przeczytać więcej o 'map' i innych funkcjach w [Clojure docs] (http: // clojuredocs.org/clojure_core/clojure.core/map). –

7
(fn [f coll] (map #(apply f %1) (partition 2 1 coll)) 

Przejdź bezpośrednio do 4Clojure teraz!

+5

Świetnie! btw '# (zastosowanie f% 1)' można zmienić na '(częściowe zastosowanie f)' – mishadoff

+0

4clojure! łał! to wydaje się być świetne miejsce. –

+0

Lub po prostu '# (zmniejszenie f%)' – film42

Powiązane problemy