La risposta di nixeagle evita di testare esplicitamente ogni elemento dell'elenco. Se il test non si presta all'inserimento nel terzo argomento di Select
, il seguente potrebbe essere utile.
Per fare questo, è necessario conoscere lo standard Or
e And
funzioni, così come i comandi Map
(/@
) e Apply
(@@
) che sono estremamente importanti per qualsiasi utente Mathematica per imparare. (vedi this tutorial)
Ecco un semplice esempio.
In[2]:= data = RandomInteger[{0, 10}, {10}]
Out[2]= {10, 1, 0, 10, 1, 5, 2, 2, 4, 1}
In[4]:= # > 5 & /@ data
Out[4]= {True, False, False, True, False, False, False, False, False, \
False}
In[6]:= And @@ (# > 5 & /@ data)
Out[6]= False
Che cosa sta succedendo qui è che si sta mappando la funzione ("maggiore di 5") per ogni elemento della lista usando Map
, per ottenere un elenco di Vero/Falso valori. Si sta quindi applicando la funzione logica standard And
all'intero elenco per ottenere il singolo valore booleano.
Queste sono tutte funzionalità fondamentali in Mathematica e vi consiglio di leggere attentamente la documentazione per queste funzioni e di esercitarvi ad usarle.
Questo non è il metodo più efficiente, ma per piccoli problemi non noterai la differenza.
In[11]:= Do[Select[data, ! # > 5 &, 1] === {}, {10000}] // Timing
Out[11]= {0.031, Null}
In[12]:= Do[And @@ (# > 5 & /@ data);, {10000}] // Timing
Out[12]= {0.11, Null}
Per Exists
, l'alternativa al Select
sarebbe MatchQ per modelli o MemberQ
per i valori espliciti. La documentazione ha alcuni esempi utili.
Forse stai cercando And e/o Or? (Mi piace il modo in cui suona, ma potrebbe apparire migliore come (&&)^2 (||)^2) For All ed Exists in realtà non sono pensati per questo sebbene possano essere adattati. Esempio: Risolvi [ForAll [x, x == 1 || x == 2 || x == 3, x> 2.5]] restituirà False. –
Questa domanda è stata posta prima qui, in realtà più di una volta. Vedi qui: http://stackoverflow.com/questions/4181470/custom-function-with-non-standard-evaluation-behaves-like-table, e qui: http://stackoverflow.com/questions/4911827/non- standard-evaluation-and-packedarray –