Perché i libri di testo usano lo pseudocodice piuttosto che le lingue reali?

4

Nelle università e nei libri di testo dell'algoritmo, è abbastanza comune per l'insegnante e l'autore spiegare il flusso di controllo in pseudo-codice. Con l'avvento di linguaggi più espressivi come Python e Haskell, tra gli altri, è ragionevole che le università passino a spiegare gli algoritmi tramite una di queste lingue?

L'unico vantaggio dello pseudo-codice che riesco a pensare è che si dice che sia un linguaggio indipendente dal linguaggio. Ma non è. Alcuni pseudo-codici usano un approccio imperativo, altri pseudo-code sembrano funzionali. Gli autori si limitano a prendere in prestito la semantica da qualunque linguaggio di programmazione si senta a proprio agio, o peggio descrivono semplicemente la semantica nel linguaggio naturale. Quindi se lo pseudo-codice non è realmente indipendente dal linguaggio, qual è il vantaggio di usarlo allora? Non sarebbe meglio usare solo una lingua esistente?

    
posta Asterisk 21.02.2016 - 15:18
fonte

2 risposte

13

No. Il punto di pseudo-codice è che non deve compilare. Posso velocemente sorvolare su dettagli irrilevanti. Al contrario, anche i linguaggi che assomigliano allo pseudocodice a prima vista possono avere dettagli non intuitivi che limiterebbero l'algoritmo. Prendiamo ad esempio Quicksort in Haskell:

qs :: Ord a => [a] -> [a]
qs [] = []
qs (pivot:xs) = (qs smaller) ++ pivot:(qs larger)
  where smaller = [x | x <- xs, x <= pivot]
        larger  = [x | x <- xs, x > pivot]

o lo stesso in Python:

def qs(array):
  if not array:
    return []
  pivot = array[0]
  xs = array[1:]
  smaller = [x for x in xs if x <= pivot]
  larger  = [x for x in xs if x > pivot]
  return qs(smaller) + [pivot] + qs(larger)

Il vantaggio in entrambi i casi è che questo è un codice eseguibile, e come tale può essere testato, tipografato e gestito dagli studenti. Tuttavia, entrambi includono dettagli sintattici che distraggono. Gli studenti di solito sono meglio serviti da pseudocodici che illustrano l'intenzione dell'algoritmo, non i dettagli di implementazione:

algorithm QUICKSORT(array)
  return [] if array is empty
  pivot ← array[0]
  xs ← array[1, ...] -- the rest of the array without the pivot
  smaller ← [x | x ∈ xs, x <= pivot] -- all smaller or equal elements
  larger ← [x | x ∈ xs, x  > pivot] -- all larger elements
  return [QUICKSORT(smaller)..., pivot, QUICKSORT(larger)...]

Differenze notevoli:

  • Posso semplicemente creare una sintassi di comprensione delle liste che assomiglia alla matematica piuttosto che dover spiegare perché Python ha un for e if qui.

  • Non devo spiegare la sintassi di quella lingua per la concatenazione di elenchi. Perché Python usa + addizione? Cos'è : in Haskell? Posso semplicemente scegliere una sintassi che ottenga il punto in modo più chiaro.

  • la firma del tipo Ord a => [a] -> [a] è solo un dettaglio di implementazione. Anche se probabilmente utile in questo caso, le firme del tipo a volte richieste da Haskell possono diventare assurde.

  • Non devo spiegare perché Python considera le raccolte vuote false, e cosa si intende per array[1:] .

  • Evito gli studenti intelligenti sottolineando che dovrei davvero usare yield nell'esempio Python.

  • Haskell fa schifo per spiegare strutture dati mutabili come tabelle hash, alberi RB, ....

  • Le cose cominciano a diventare molto specifiche per la lingua una volta che abbiamo bisogno di record complessi per esprimere i nostri algoritmi. Per esempio. Il sistema a oggetti di Python ha alcune sorprese che sono semplicemente fonte di distrazione.

Detto questo, può essere molto utile usare uno di questi linguaggi oltre allo pseudocodice, solo etichettare con attenzione cosa è cosa.

    
risposta data 21.02.2016 - 15:58
fonte
6

No.

L'intero scopo dello pseudo-codice è quello di astrarre i dettagli e le complessità dei singoli linguaggi in modo da concentrarti su ciò che il programma dovrebbe fare, piuttosto che su come lo fa. Con lo pseudo-codice puoi creare regole arbitrarie che non devono essere conformi ai requisiti di implementazione effettivi come fanno le lingue del mondo reale, ma solo ai requisiti dell'argomento attuale.

    
risposta data 21.02.2016 - 15:24
fonte

Leggi altre domande sui tag