Qual è la parola per un'operazione che può essere applicata più volte e che non cambia mai stato oltre l'applicazione iniziale?


38

Sto cercando di ricordare una parola, credo sia correlata alla teoria computazionale o del database. Il sinonimo più vicino è atomicma non è esattamente quello. Fondamentalmente è un tipo di calcolo che dovrebbe produrre lo stesso risultato anche quando eseguito più volte di seguito, il che significa che non crea effetti collaterali per se stesso.

Mi sono imbattuto specificatamente in questa parola in una risposta Stack Overflow su un comando chmod (o qualche altra operazione relativa alle autorizzazioni).

Spero che sia abbastanza per andare avanti. Frugare su Wikipedia non è di grande aiuto.


5
Ha senso specificare se si passa lo stesso input a ogni chiamata dell'operazione o si esegue ogni operazione successiva sui risultati della chiamata precedente.
maxim1000,

3
@ maxim1000 Concordato. A giudicare dalla varietà di risposte, nessuno è sicuro del significato del PO.
ford,

Il problema qui è che la domanda nell'argomento non è strettamente la stessa della domanda nel corpo. Ho risposto a quello sull'argomento ma, guardando di nuovo ora, sono abbastanza sicuro che non è quello che voleva il poster. Modifica la domanda, elimina la risposta
pdr

Stai chiedendo qualcosa come una richiesta GET (in cui lo stesso risultato viene restituito ogni volta, non importa quale), o stai chiedendo qualcosa come l'operatore di assegnazione (che ha un effetto, ma ripetere lo stesso compito non cambia nulla )?
Izkata,

Risposte:


91

Potresti pensare a " idempotente ".

L'idempotenza è la proprietà di alcune operazioni in matematica e informatica, che possono essere applicate più volte senza modificare il risultato oltre l'applicazione iniziale.


16
Fondamentalmente, fè idempotente IFF f(f(x)) == f(x)FORALL x.
Jörg W Mittag,

1
Interessante limitazione della descrizione - La sezione talk della pagina collegata discute i pulsanti dell'ascensore. Devono esserci migliaia di comportamenti che possono essere descritti come "Idempotenti" non correlati a Math o Comp Sci.
mattnz,

Dalla mia comprensione della domanda, questo non è affatto ciò che l'OP sta chiedendo, poiché non parla di applicare l'algoritmo sui risultati della prima iterazione, ma di riapplicarlo sugli stessi dati di origine. Qualcosa di più come se x = y, quindi F (x) = F (y)
Joubarc

2
@Joubarc sì, idempotente ha un significato leggermente più libero nell'informatica rispetto al resto della matematica, quindi è corretto. en.wikipedia.org/wiki/Idempotent#Computer_science_meaning
jk.

1
@Joubarc Significa solo che è una funzione. Le operazioni che sullo stesso input possono agire diversamente non possono essere chiamate funzioni dal punto di vista matematico. Se in programmazione sono chiamate funzioni, le funzioni che in effetti danno sempre lo stesso output per lo stesso input sono chiamate purefunzioni ... Beh, un po ', non devono avere effetti collaterali.
Paul Stelian

12

La parola generale è idempotenza che si applica sia ai computer che alla matematica. Non è la stessa cosa di Reentrant con cui viene spesso confuso. L'idempotenza è esattamente ciò che hai descritto, Reentrant è sostanzialmente interrompibile con la possibilità di riprendere esattamente da dove eri rimasto.

Linguaggi puramente funzionali come Haskell sono costruiti attorno al principio di essere il più vicino possibile a Idempotent. Le prime tre lettere della sigla ACID nella teoria dei database sono idempotenza applicata ai database.


10

Potresti cercare una funzione pura .

Come definito nel collegamento, due condizioni rendono pura una funzione:

  1. La funzione valuta sempre lo stesso valore di risultato dati gli stessi valori di argomento.
  2. La valutazione del risultato non provoca alcun effetto collaterale o output osservabile semanticamente, come la mutazione di oggetti mutabili o l'output a dispositivi I / O.

4
La purezza va oltre la semplice idempotenza: una funzione pura non può avere alcun effetto collaterale, mentre una idempotente può avere effetti collaterali fintanto che non fanno in modo che le serie successive facciano cose diverse. Ad esempio, una funzione che utilizza variabili mutabili locali non è pura, ma è probabilmente idempotente. Potresti persino scrivere una funzione che utilizza variabili globali ed è ancora idempotente, purché tu ti assicuri che protegga quei globi per renderlo rientrante.
martedì

3
@tdammers Purezza e idempotenza sono completamente ortogonali: una funzione pura non deve essere idempotente e viceversa. Ad esempio, f(x) := x + 1è puro ma certamente non idempotente.
Konrad Rudolph,


0

Un'altra possibilità è deterministica .

In informatica, un algoritmo deterministico è un algoritmo che, dato un input particolare, produrrà sempre lo stesso output, con la macchina sottostante che passa sempre attraverso la stessa sequenza di stati.


1
questo è stato nella risposta precedente appena cancellata; Il commento che ha sfidato questa idea è stato: "Questo è sbagliato. Ad esempio, l'algoritmo che scambia due valori è perfettamente deterministico ma eseguirlo due volte non produrrà lo stesso risultato di eseguirlo una volta."
moscerino

2
Non è chiaro se questo risponda o meno alla domanda originale, perché la domanda originale non è molto ben formulata, ma ho votato a fondo questa risposta perché la parola deterministica potrebbe essere quella che qualcuno stava cercando quando sono finiti Qui.
Richard Whitehead,

Se mutate i valori di input prima dell'esecuzione successiva, come potete affermare di fornire alla routine gli stessi valori di argomento esatti ..?
Hein Haraldson Berg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.