Pergunta

Ok, isso pode parecer uma pergunta ridícula, mas como você retorna uma lista no esquema.

Nenhuma solução correta

Outras dicas

Com base em ver algumas de suas outras perguntas, acho que você pode estar tendo problemas para envolver sua cabeça nos conceitos centrais para uma linguagem funcional, como o esquema.

No nível que você está aprendendo ao esquema (Novice), todas as funções que você escreve têm uma entrada e uma saída, e o corpo de cada função é uma única expressão. Qualquer que seja o valor que a expressão avalie seja retornado pela função. Não há necessidade de "retornar" nada como faria em uma linguagem imperativa como Java ou C; Isso acontece como uma conseqüência direta da avaliação da expressão.

O corpo de uma função é uma única expressão. Não é como Java, onde o corpo de um método consiste em uma série de instruções:

do this
then do that
then do something else
then return something (maybe)

As funções do esquema avaliam uma única expressão; nada mais. Aqui está uma função simples que adiciona 5 a qualquer número que seja passado como um argumento:

(define (add5 x)
  (+ x 5))

O corpo da função é (+ x 5), que é apenas uma expressão a ser avaliada. O valor de x está conectado, o + (adição) a função é aplicada a x e 5, e o resultado é retornado.

As listas não são muito diferentes. Tudo o que você precisa é de uma expressão que construirá uma lista. Dois já foram mencionados: Lista é usado para construir uma lista do zero se você já tiver todos os elementos; contras é usado para adicionar um único elemento a uma lista existente e é frequentemente usado recursivamente.

Aqui está uma função que consome um número n e constrói a lista (n n-1 n-2 ... 0)

(define (makelist n)
  (if (= n 0)
     (list 0)                       ; base case. Just return (0)
     (cons n (makelist (- n 1)))))  ; recursive case. Add n to the head of (n-1 n-2 ... 0)

Nos casos base e recursiva, uma lista é retornada simplesmente avaliando uma expressão que usa uma das funções de construção de listas.

Aqui está outro exemplo. Este usa o nosso add5 função para adicionar 5 a cada elemento de uma lista de números (LON):

(define (add5list lon)
  (if (null? lon)
    `()                 ; base case: lon is empty. Return an empty list.
    (cons (add5 (car lon)) (add5list (cdr lon)))))  ; recursive case.
                                                    ; Add 5 to the head of lon and prepend it to the tail of lon

Novamente, os casos básicos e recursivos estão retornando listas avaliando expressões que resultam em listas.

A coisa principal a lembrar sobre o esquema é que todas as funções retornam algo e que algo é simplesmente o resultado da avaliação de uma expressão. O corpo de uma função de esquema é uma única expressão.

Você provavelmente quer simplesmente: '(2 3 5 7 11) ou (list 2 3 5 7 11)?

Você também pode construir listas especificando um elemento e uma lista para adicioná -lo: (cons 2 (cons 3 '()))

Aqui está um exemplo de retornar uma lista de uma função:

(define returnlist 
  (lambda(a b c) 
    (cons a (cons b (cons c '())))
))

(returnlist 2 3 4)

O valor de retorno será a lista: (list 2 3 4)

Outra maneira não tão bem conhecida de fazer isso:

> ((lambda x x) 2 3 5 7 11)
(2 3 5 7 11)

Ou seja, a função "Lista" em si pode ser definida como:

> (define list (lambda x x))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top