Pregunta

Bien esto puede parecer una pregunta absurda, pero ¿cómo se puede devolver una lista en el esquema.?

No hay solución correcta

Otros consejos

Basado en ver algunas de sus otras preguntas, creo que puede estar teniendo problemas para conseguir su cabeza envuelta alrededor de los conceptos centrales de un lenguaje funcional como Esquema.

En el nivel que estás aprendiendo Esquema (novato), cada función que escribe tiene una entrada y una salida, y el cuerpo de cada función es una expresión única.Cualquiera sea el valor que la expresión se evalúa como es devuelto por la función.No hay necesidad explícita de "devolver" algo como lo haría en un imperativo lenguaje como Java o C;lo que ocurre como una consecuencia directa de la evaluación de la expresión.

El cuerpo de una función es una expresión única.No es como Java, donde el cuerpo de un método se compone de una serie de instrucciones:

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

Esquema de las funciones de evaluar una expresión única;nada más.He aquí una sencilla función que agrega 5 a cualquier número que se pasa como argumento:

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

El cuerpo de la función es (+ x 5), que es sólo una expresión a evaluar.El valor de x está enchufado, la + (adición) función se aplica a x y 5, y el resultado se devuelve.

Las listas no son muy diferentes.Todo lo que necesitas es una expresión que se va a construir una lista.Dos ya se han mencionado: lista se utiliza para crear una lista desde cero si ya dispones de todos los elementos; contras se usa para añadir un elemento a una lista existente y se utiliza a menudo de forma recursiva.

Aquí está una función que consume un número n y se genera la 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)

En la base y recursiva de los casos, una lista devuelta por simplemente la evaluación de una expresión que utiliza uno de la lista de funciones del edificio.

He aquí otro ejemplo.Esta usa nuestro add5 función para sumar 5 a cada elemento de una 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

De nuevo, la base y recursiva de los casos están volviendo a las listas mediante la evaluación de las expresiones que resultan en las listas.

La clave de la cosa a recordar sobre el Esquema de todas las funciones devuelven algo, y ese algo es simplemente el resultado de evaluar una expresión.El cuerpo de un Esquema de función es una expresión única.

Es posible que desee simplemente: '(2 3 5 7 11) o (list 2 3 5 7 11)

?

También puede construir listas mediante la especificación de un elemento y una lista para añadirlo a: (cons 2 (cons 3 '()))

Este es un ejemplo de devolver una lista de una función:

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

(returnlist 2 3 4)

Valor de retorno será la lista: (list 2 3 4)

Otra forma no tan bien conocido para hacer esto:

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

que es, la función de "lista" en sí mismo puede ser definido como:

> (define list (lambda x x))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top