Non riesco a capire come funziona questa funzione. La funzione dovrebbe prendere una stringa e dividere quella stringa in una coppia, di cui il primo elemento è la prima 'parola' che si trova nella stringa e il secondo elemento è il resto della stringa di input. In particolare, nella riga 6, capisco perché la funzione debba terminare quando isSpace c
è vera, ma non capisco perché dovrebbe restituire una tupla con il primo elemento che è la lista vuota. Mi chiedevo se qualcuno potesse spiegare perché questo funziona con un esempio relativamente semplice (ma non banale) come nextWord "an apple"
.Problemi di comprensione del funzionamento della ricorsione tupla in Haskell
import Data.Char
nextWord :: String -> (String, String)
nextWord []
= ([],[])
nextWord (c:cs)
| isSpace c = ([], cs)
| otherwise = (c: word, other)
where
(word, other) = nextWord cs
EDIT: Come esempio di ciò che questa funzione restituisce quando l'argomento data inizia con uno spazio, NextWord "ciao" deve restituire ("", "ciao").
"perché che dovrebbe restituire una tupla con il primo elemento è la lista vuota ". Cosa dovrebbe restituire, invece? –
Puoi scrivere quel valore in Haskell? –
Questa non è una ricorsione a tupla. È una funzione ricorsiva che restituisce una tupla. Nel caso dello spazio restituisce la lista vuota come primo componente: questa è in realtà la stringa vuota.Questo è fatto in modo che la chiamata ricorsiva possa aggiungere i caratteri davanti a quello in modo da isolare la prima parola nella stringa di input. – chi