Vocabolario: dovrei chiamare questa applicazione o mappa? [chiuso]

2

Quindi, ho il compito di organizzare il codice e creare una libreria con tutto il codice comune tra i nostri prodotti.

Una cosa che sembra succedere sempre e che ho voluto astrarre è postata in basso in pseudocode, e non so come chiamarla (diversi prodotti hanno implementazioni e nomi di dominio differenti per questo)

list function idk_what_to_name_it ( list list_of_callbacks, value common_parameter ): 
  list list_of_results = new list
  for_each(callback in list_of_callbacks)
    list_of_results.push(callback(common_parameter))
  end for_each
  return list_of_results
end function

Chiameresti questo costrutto specifico a

list ListOfCallbacks.Map( value value_to_map) 

metodo o sarebbe meglio essere

value Value.apply(list list_of_callbacks)

Sono davvero curioso di questo genere di cose. C'è una guida standard per questa roba?

    
posta Carlos Vergara 25.10.2012 - 23:42
fonte

7 risposte

4

Questa è una mappa. In haskell sarebbe scritto come

map ($ param) listOfFunctions

questo prenderà ciascuna funzione ed eseguirla con il singolo parametro, restituendo un elenco dei risultati.

Non riconosco il linguaggio che hai usato, ma penso che qualcosa del genere abbia senso

list function map ( callback functionToMap, list list_of_callbacks ): 
  list list_of_results = new list
  for_each(callback in list_of_callbacks)
    list_of_results.push(functionToMap(callback))
  end for_each
  return list_of_results
end function

Quindi lo useresti come:

value function execute_with_parameter( callback function_to_execute ):
  return function_to_execute(whatever_parameter_you_want)
end function

map(execute_with_parameter, list_of_callbacks)

Mappare su un elenco di elementi significa utilizzare una normale funzione per mappare su di esso, mappare su un elenco di funzioni significa utilizzare una funzione di ordine superiore per mappare su di esso, ma è sempre una mappa.

    
risposta data 26.10.2012 - 00:44
fonte
4

Non so se questo è il nome standard (o se è quello che ti piacerebbe chiamarlo), ma in Clojure, la funzione che lo fa è chiamata juxt (a meno di giustapposizione )

Usage: (juxt f)
       (juxt f g)
       (juxt f g h)
       (juxt f g h & fs)
Takes a set of functions and returns a fn that is the juxtaposition
of those fns.  The returned fn takes a variable number of args, and
returns a vector containing the result of applying each fn to the
args (left-to-right).
((juxt a b c) x) => [(a x) (b x) (c x)]

Fonte: link

Il tuo esempio è un caso speciale di juxt con esattamente un parametro (e scrivi le cose correlate che hai menzionato, a causa dei dettagli di implementazione).

    
risposta data 26.10.2012 - 00:16
fonte
2

Non segue i significati classici per "mappa" o "applica". Mappa chiama la funzione stessa su ciascun elemento da un elenco e restituisce un elenco dei risultati. 'Applica' chiama una funzione che passa gli elementi di una lista come argomenti di funzione. La tua funzione è più vicina alla "mappa", ma poiché passa lo stesso argomento a un elenco di funzioni, invece di chiamare ripetutamente una singola funzione, gli darei un nome diverso.

    
risposta data 26.10.2012 - 00:02
fonte
1

Potresti chiamarlo un prodotto cartesiano pointwise bidimensionale delle funzioni. Tuttavia, questo non è un nome breve e potrebbe richiedere una spiegazione ...

    
risposta data 26.10.2012 - 14:08
fonte
0

A mio parere, la parola "mappa" implica un qualche tipo di associazione (ad esempio un "dizionario"), anche se non sembra esserci alcuna associazione o associazione di dati che si verificano nell'algoritmo.

Il risultato della tua funzione è un elenco di valori generato, quindi suggerirei che è importante che il nome della tua funzione metta una certa enfasi sul risultato finale e / o sugli effetti collaterali che l'algoritmo potrebbe avere stato (non sembra avere effetti collaterali quindi maggiore enfasi sul risultato / output).

es. La libreria standard C ++ è dotata di alcuni algoritmi vagamente simili che contengono la parola generate - il loro scopo è generare più elementi di dati in base agli argomenti di input.

    
risposta data 26.10.2012 - 00:02
fonte
0

Non esiste uno standard reale per questo, in realtà nemmeno una convenzione comune. Potresti voler sfogliare le API dei linguaggi di programmazione e dei toolkit che fanno un sacco di giochi di prestigio: Ruby, Python, Linq, Matlab, Maple, C ++ STL, ... Dai un'occhiata e vedrai che ogni programma / lib ha le sue convenzioni.

In effetti le lingue / librerie citate hanno addirittura contraddizioni nelle convenzioni di denominazione:

Rubino:

doubled = [1,2,3].map{|x| 2*x}

Linq:

var doubled = new int[] { 1, 2, 3}.Select(s => 2 * x);

(In Ruby select filtra gli elementi da un elenco.)

Forse vuoi chiamare la tua funzione applyMaps? Questo è ciò che Maple fa:

map(apply, [sin, cos, tan], Pi)

produce:

[0, -1, 0]
    
risposta data 26.10.2012 - 00:19
fonte
0

Lo chiamerei fire_callbacks , call_callbacks , apply_callbacks o qualcosa del genere.

Di solito ho avuto un metodo come parte di un segnale o di un oggetto osservabile.

    
risposta data 26.10.2012 - 00:21
fonte

Leggi altre domande sui tag