2015-06-30 24 views
12

io continuo a non capire la differenza dopo aver letto thissono linguaggi di programmazione statistica come R/SAS considerato funzionale o procedurale

Così, invece di chiedere qual è la differenza tra funzionale vs programmazione procedurale, ho pensato, forse un il linguaggio che conosco può servire da esempio.

Quindi, le mie domande: le lingue R/SAS sono considerate procedurali o funzionali?

+5

Posso darti quello che Hadley Wickham pensa della tua domanda, leggi [qui] (http://adv-r.had.co.nz/Functional-programming. html). – SabDeM

+3

Si potrebbe dividere questa domanda in due poiché R e SAS sono abbastanza diversi, in particolare quando si tratta di programmazione orientata agli oggetti. – C8H10N4O2

risposta

14

R è principalmente un linguaggio di programmazione funzionale. Ha alcune eccezioni in cui le cose vengono fatte tramite effetti collaterali, quindi non è così funzionale come Haskell. Tuttavia, se non si è disposti ad adattare il proprio stile di programmazione all'uso delle funzioni, si avrà un po 'di difficoltà a scrivere codice R efficiente. (L'unica ragione per cui sto scrivendo questa risposta è che chiamare R un linguaggio orientato agli oggetti sarà fuorviante per le persone che vengono in attesa di poter inviare messaggi di funzione agli oggetti dati nello stesso modo in cui lo fanno con Java. R usa la classe di un oggetto come meccanismo di selezione della spedizione per le funzioni "generiche", ma non è lo stesso paradigma dei linguaggi OO completi.

R ha tra tre, quattro o cinque classi di oggetti principali a seconda di come si pensa su di loro e sui tipi di funzione associati. Le funzioni S3 originali che inviano solo sulla classe dei loro primi argomenti sono probabilmente ancora le più comunemente utilizzate, sebbene la classe S4 che può inviare invii a più argomenti sia ampiamente utilizzata nel mondo BioConductor. Gli oggetti con classe di riferimento o R5 o proto-classe somigliano di più ai tipi di dati di programmazione orientati agli oggetti. Sono un po 'vago in quest'ultima frase, perché mi manca molta esperienza con loro.

SAS è principalmente un linguaggio procedurale. È possibile definire le funzioni, ma non è il modo in cui la maggior parte delle persone interagisce con SAS e i suoi SET di dati, almeno all'inizio. Almeno quando l'ho usato 15 anni fa, non aveva un modello di oggetti. Direi che il suo principale vantaggio è il supporto superiore per la "scrittura di relazioni".

(Il commento che la manipolazione dei dati è "difficile in R" indica semplicemente la mancanza di esperienza. La quantità di codice necessaria per la manipolazione dei dati in R è molto inferiore al codice utilizzato dai miei colleghi SAS. in SAS, quindi la conversione sarà difficile, ma quelli di noi che sono cambiati in genere hanno bloccato con R.)

+0

Le macro non sono SAS equivalenti alle funzioni? Sono sicuro che gli inventori di SAS lo considerano procedurale, perché tutto è un 'proc' :) – Victor

+0

@Victor: ho detto che _could_ definisci le funzioni con SAS, anche se dubito che ci sia molto in termini di meccanismo di invio come con R. Sospetto fortemente che non sia ancora il caso che ai nuovi utenti SAS venga insegnato a scrivere macro SAS. –

+0

Grazie. Ho letto che i linguaggi funzionali sono adatti naturalmente per l'elaborazione parallela.È facile eseguire l'elaborazione parallela in R, come per esempio (framework per esecutori Java) – Victor

1

Direi che R è decisamente procedurale; La programmazione funzionale è molto più che l'uso di funzioni, ad esempio usando una certa modularità grossolana; anzi, p.p. si impegna a modularità estrema che è uno dei suoi principali punti di forza; consulta il documento classico "Why functional programming matters" di John Hughes per saperne di più.

SAS sembra più scopo speciale per me essere progettato per organizzare i dati in tabelle e fare report statistici sullo stesso. Sembra non avere alcuna relazione particolare con la programmazione funzionale; Sto ancora indagando sulle sue capacità procedurali (o sulla sua mancanza)