Linguagens de Programação - Atividade 16

Leia com atenção as instruções abaixo.

Valor: 2,0 pontos na 3ª Nota.

Data da Entrega Limite: 12/02/2022

Coloque a resposta na pasta atividades/atividade16 do repositório.

Questão 01 - 1,0 Ponto

Altere o programa findlinks.go para que percorra a lista ligada n.FirstChild usando chamadas recursivas a visit no lugar de um laço. Ou seja, considerando o laço abaixo:

for c:= n.FirstChild; c != nil; c = c.NextSibling {
    links = visit(links, c)
}
                        

O mesmo deve substituído por código que chame visit com parâmetros que garantam o mesmo efeito da versão com o laço.

Questão 02 - 1,0 Ponto

Faça um programa chamado expand.go que tenha uma função com a seguinte assinatura:

expand(s string, f func(string) string) string
                        

Essa função deve substituir cada substring $foo em s pelo texto devolvido por f("foo"). No seu programa, invoque a função passando o valor do primeiro argumento da linha de comando, que é uma string, e uma função chamada joker, definida da seguinte forma:

func joker(s string) string {
    return "HaHAhAhAhaHA " + s
}                        
                        
Um exemplo de invocação seria:
$ go run expand.go "O nome da disciplina é $LIP"
"O nome da disciplina é HaHAhAhAhaHA LIP"
$ go run expand.go "Campus $da UFC em $Quixadá"
"Campus HaHAhAhAhaHA da UFC em HaHAhAhAhaHA Quixadá"