La differenza tra ? e /; [duplicare]

Sep 02 2020

Posso fare quanto segue

Cases[Range@10, x_ /; OddQ[x]]

Ma perché non posso fare al x_?OddQ[x]posto di _?OddQquanto segue?

Cases[Range@10, x_ ? OddQ[x]]

In generale, sono confuso con l'utilizzo di ?e /;.

modificare

Dopo aver letto i commenti e le risposte esistenti, ho capito ora che ha ?bisogno di una funzione. Tuttavia, ancora mi ha confuso, quando preferiamo ?a /;e viceversa?

Risposte

2 wuyudi Sep 02 2020 at 15:13

Se dovresti usare OddQ[x]

Cases[Range@10, x_?(x \[Function] OddQ[x])]

modificare

Grazie al commento per averlo segnalato, l' xin (x \[Function] OddQ[x])è irrilevante rispetto al primo x, puoi sostituirlo con eventuali altre variabili.

In altre parole, (x \[Function] f[x])== Function[x,f[x]]== f[#]&==f

Alittlemouseonthepampas Sep 02 2020 at 15:00

È necessario eseguire questa operazione per risolvere questo problema:

Cases[Range@10, x_?(OddQ[#] &)]

Cases[Range@10, x_?(OddQ)]

Potresti avere confuso il pattern matching e le funzioni di giudizio condizionale.