2015-01-07 3 views
5

Diciamo che una funzione è severo nel suo argomento seCome diciamo formalmente che una funzione non è rigida in un argomento?

f ⊥ = ⊥ 

ma come facciamo a dire che una funzione non è severo nel suo argomento? Possiamo dire che una funzione non è rigorosa se

f ⊥ ≠ ⊥ 

?

Come si estende alle funzioni di molti argomenti, in cui è possibile o meno valutare un argomento in base al valore di qualche altro argomento?

Sto chiedendo questo nel contesto di documentare meglio le proprietà di severità delle funzioni Haskell usando la documentazione di Haddock.

+3

Sei corretto, una funzione non è rigida se f ⊥ ≠ ⊥. Se non si può valutare un argomento a seconda di , la funzione è non rigida (nell'argomento che potrebbe non essere valutato). – BadZen

+2

Se una funzione * sempre * valuta il suo argomento, viene chiamata strict in tale argomento. Una funzione che * mai * valuta un argomento è chiamata non interessante in quell'argomento. OK, OK, l'ho appena inventato. Ma studiare questo comportamento insignificante non sembra essere una scienza molto eccitante. Una funzione che * non sempre * valuta il suo argomento è detta non rigida in quell'argomento. –

+2

@ n.m. Una funzione può ignorare completamente la sua argomentazione ed essere ancora severa in tale argomento. – augustss

risposta

12

Non esiste una notazione standard per esprimere proprietà di rigore complesso. Inoltre, non è semplice come essere rigorosi, dal momento che per le strutture di dati potrebbe essere necessario dire esattamente quanto viene valutato.

Detto questo, per una semplice funzione come

cond c t e = if c then t else e 

si può immaginare dicendo che il rigore è 1 & (2 | 3), il che significa che valuterà il primo argomento, e il secondo o il terzo. Queste sono le proprietà di rigore che un semplice analizzatore di rigore si presenterà. (E quelli sembrano essere gli unici che valgono la pena.)

Problemi correlati