es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué significa “let name(param1, param2) = ..” en ocaml (a diferencia de simplemente “let name = …”)?

Estoy viendo un compilador escrito para una versión extremadamente simplificada de C. Soy nuevo en OCaml y estoy especialmente confundido acerca de esta estructura.

let check (globals, functions) =
(* Un montón de cosas abstraídas *)
  let check_function ...
    .... (* Un montón de cosas abstraídas *)
in (globals, List.map check_function functions)

Donde “globals” es una lista de (tipo_de_var, nombre_de_var) y “functions” es un registro de funciones. No he publicado el archivo completo (es muy largo) y mi pregunta es solo sobre la declaración let más externa.

Siempre he visto declaraciones let simples donde puedes tener algo como:

let nombre = expr1 en expr2

Entonces, ¿qué significa cuando tienes:

let nombre(param1, param2) = expr1 en (param1, expr1 param2)

¿Es algo similar a lo que tengo aquí?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La estructura que estás viendo es otra forma de la expresión “let” en OCaml que te permite definir una función en su lugar. Aquí se explica lo que está sucediendo:

    let check (globals, functions) =

    Esta línea define una función llamada “check” que toma dos argumentos, una lista de pares de tipo y nombre de variable llamada “globals” y una lista de registros de funciones llamada “functions”.

    let check_function ...

    Dentro de la función “check”, hay otra definición de función llamada “check_function” (con puntos suspensivos que indican que hay más código dentro).

    in (globals, List.map check_function functions)

    Finalmente, la palabra clave “in” es seguida por una expresión que se devolverá cuando se llame a la función “check”. En este caso, es una tupla que contiene el argumento “globals” y una versión modificada del argumento “functions” donde se ha aplicado “check_function” a cada registro de función.

    Entonces, para responder a tu pregunta, la estructura que estás viendo es simplemente una definición de función con parámetros más complejos y una expresión devuelta que involucra llamar a otra función.

Comments are closed.