Path: csiph.com!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Patricia Ferreira Newsgroups: pt.comp.programacao Subject: Re: Lisp, um mapa de trajeto Date: Sat, 13 Jan 2024 09:46:34 -0300 Organization: A noiseless patient Spider Lines: 70 Message-ID: <878r4txuxh.fsf@example.com> References: <87sf37ajzn.fsf@example.com> <87y1cy8z8u.fsf@example.com> <87v881z5qs.fsf@brilhante.top> <87a5pd6kuv.fsf@yaxenu.org> <8734v3ztrz.fsf@brilhante.top> <877cke4ny3.fsf@example.com> <87y1cujtsk.fsf@brilhante.top> <87ttni48z9.fsf@example.com> <87r0im428v.fsf@brilhante.top> <87edem3yds.fsf@example.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: dont-email.me; posting-host="c2f0907cbb8bbadcd021849970a21db1"; logging-data="4144199"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19nXsbs/TVgIF62DOHGFeolIiV/1fpUEM0=" Cancel-Lock: sha1:v3jDZU0GJUrJ6ENZKEx1RwLK+jg= sha1:wCAyjLHM108TpM0c6XybzYKXvpQ= Xref: csiph.com pt.comp.programacao:141 "Nuno Silva" writes: > On 2024-01-12, Patricia Ferreira wrote: > >> Daniel Cerqueira writes: >> >>> Patricia Ferreira writes: >>> >>>> Vejamos um próximo exercício? >>>> >>>> (*) Exercício 2 >>>> >>>> Escreva um procedimento f que consome duas listas de números inteiros em >>>> ordem ascendente. O procedimento f retorna uma única lista ordenada de >>>> números que contenha todos os números de ambas listas de entrada. Um >>>> número ocorre na saída tantas vezes quando ocorre em ambas as listas de >>>> entrada. Quando tempo você levou pra escrever o procedimento? >>> >>> Fácil! Acabei de ler precisamente esse capítulo do PCL. Foi só o tempo >>> de procurar como é a sintaxe do sort. Diria que demorei 1 minuto. >>> >>> (defun f (a b) >>> (sort (append a b) #'<)) >> >> Solução correta, o nos obriga a fazer um patch no exercício: o espírito >> do exercício não é esse. O exercício não está buscando detectar se você >> conhece a sintaxe Common Lisp. O exercício que se saber se você pensa >> como um programador Lisp. O primeiro exercício queria ver se você >> reconhecia a varredura de /uma/ lista. O segundo agora quer saber se >> você consegue varrer duas listas ao mesmo tempo. Vai-lhe ser útil ler o >> HtDP. > > Há, nesta versão, também uma questão de menor eficiência, certo? > Percorre a, e depois percorre a lista mais longa "a+b", quando uma outra > solução (possivelmente a que tens em mente) só percorre cada lista uma > vez, portanto só "a+b"? O objetivo do exercício não é performance, não. (Também não vejo qualquer diferença de performance, não. Talvez /sort/ até a versão mais rápida porque ela trabalha in-place.) >> (*) Exercício 2 patch-1 >> >> Use apenas cond, null, car, cdr e <. Escreva um procedimento f que > > Não falta aí cons? Falta. > (Estou a pensar que talvez se conseguisse fazer a lista do resultado > com a notação para cons cell "(a.b)", `backtick` e vírgula), mas > provavelmente aqui o objectivo é usar cons?) Boa solução, exceto que o exercício não disse que poderia usar quote ou quasiquote. :-) Se sairmos do que é permitido, então usemos cons mesmo. >> consome duas listas de números inteiros em ordem ascendente. O >> procedimento f retorna uma única lista ordenada de números que contenha >> todos os números de ambas listas de entrada. Um número ocorre na saída >> tantas vezes quando ocorre em ambas as listas de entrada. Quando tempo >> você levou pra escrever o procedimento? (*) Exercício 2 patch-2 Use apenas cond, null, car, cdr, cons e <. Escreva um procedimento f que consome duas listas de números inteiros em ordem ascendente. O procedimento f retorna uma única lista ordenada de números que contenha todos os números de ambas listas de entrada. Um número ocorre na saída tantas vezes quando ocorre em ambas as listas de entrada. Quando tempo você levou pra escrever o procedimento?