sabato 2 novembre 2024

2 Linguaggio L1 – Estensione di L0: procedure e liste

 

🚀 Linguaggio L1 – Estensione di L0: procedure e liste

📘 Introduzione

Dopo aver imparato le basi del linguaggio L0, con il modulo L1 potrai definire blocchi di codice riutilizzabili (le procedure) e manipolare insiemi di dati con le liste. Questi strumenti ti permettono di scrivere programmi più flessibili e organizzati.

📌 Nuovi costrutti nel linguaggio L1

  • def nome_procedura() – definizione di una procedura
  • chiama nome_procedura() – chiamata della procedura
  • lista = [elementi] – definizione di liste
  • aggiungi elemento a lista – aggiunta di un elemento
  • rimuovi elemento da lista – rimozione di un elemento
  • scrivi lista[indice] – accesso a elemento per indice

📘 Esempio semplice: definizione e chiamata procedura

def saluta()
  scrivi "Ciao!"
fine

chiama saluta()

📘 Esempio con liste

lista = [1, 2, 3]
aggiungi 4 a lista
scrivi lista[2]  # stampa 3
rimuovi 2 da lista
scrivi lista[1]  # stampa 3

🛠 Interprete simulato in JavaScript (per dimostrazione)

<script>
function esegui_l1(codice_l1) {
  const righe = codice_l1.split("\n");
  const variabili = {};
  const procedure = {};
  let output = "";

  function stampa(msg) {
    output += msg + "\n";
  }

  function esegui_blocco(blocco) {
    let i = 0;
    while (i < blocco.length) {
      let riga = blocco[i].trim();
      if (!riga || riga.startsWith("#")) { i++; continue; }

      if (riga.startsWith("scrivi ") && riga.includes("[") && riga.includes("]")) {
        try {
          let [nome, idx] = riga.slice(7).trim().split("[");
          idx = idx.replace("]", "").trim();
          stampa(variabili[nome.trim()][parseInt(idx)]);
        } catch { stampa("Errore di accesso alla lista."); }
      }

      else if (riga.startsWith("scrivi ")) {
        let expr = riga.slice(7).trim().split("+").map(p => p.trim());
        let res = "";
        for (let p of expr) {
          if (p.startsWith('"') && p.endsWith('"')) res += p.slice(1, -1);
          else res += variabili[p] ?? "[?" + p + "]";
        }
        stampa(res);
      }

      else if (riga.startsWith("chiedi ")) {
        let nome = riga.slice(7).trim();
        let val = prompt("Inserisci " + nome + ":");
        variabili[nome] = isNaN(val) ? val : Number(val);
      }

      else if (riga.includes("=") && !riga.startsWith("def ") && !riga.startsWith("lista =")) {
        let [n, v] = riga.split("=");
        try {
          variabili[n.trim()] = eval(v);
        } catch {
          variabili[n.trim()] = v.replaceAll('"', '').trim();
        }
      }

      else if (riga.startsWith("def ") && riga.endsWith("()")) {
        let nome = riga.slice(4, -2).trim();
        let corpo = [];
        i++;
        while (i < blocco.length && blocco[i].trim() !== "fine") {
          corpo.push(blocco[i]);
          i++;
        }
        procedure[nome] = corpo;
      }

      else if (riga.startsWith("chiama ") && riga.endsWith("()")) {
        let nome = riga.slice(7, -2).trim();
        if (procedure[nome]) esegui_blocco(procedure[nome]);
        else stampa("❌ Procedura '" + nome + "' non definita.");
      }

      else if (riga.startsWith("lista =")) {
        let contenuto = riga.slice(7).trim();
        try {
          variabili["lista"] = eval(contenuto);
        } catch {
          variabili["lista"] = [];
        }
      }

      else if (riga.startsWith("aggiungi ")) {
        let [el, nome] = riga.slice(9).split(" a ");
        if (variabili[nome.trim()] instanceof Array) {
          variabili[nome.trim()].push(isNaN(el) ? el.replaceAll('"', '') : Number(el));
        }
      }

      else if (riga.startsWith("rimuovi ")) {
        let [el, nome] = riga.slice(8).split(" da ");
        if (variabili[nome.trim()] instanceof Array) {
          let index = variabili[nome.trim()].indexOf(isNaN(el) ? el.replaceAll('"', '') : Number(el));
          if (index > -1) variabili[nome.trim()].splice(index, 1);
        }
      }

      i++;
    }
  }

  esegui_blocco(righe);
  alert(output);
}
</script>

🎯 Prossimo passo

Nel prossimo modulo, inizieremo a implementare queste funzionalità anche in un ambiente web interattivo, per provare codice L1 direttamente nel browser!

Fine STEP E – Parte 1 ✅

Nessun commento:

Posta un commento

Corso Fondamenti di Informatica e Reti: 6 Reti di computer e Internet

Reti di computer e Internet Introduzione Prova a pensare alla vita quotidiana senza reti informatiche: niente messaggi WhatsApp, niente m...