Domanda

Potrebbe per favore dare un frammento di codice che mostra come usare Lua incorporato in OCaml?

Un semplice esempio potrebbe essere un "Ciao, Mondo" variante.Sono OCaml richiedere all'utente un nome.Quindi passare il nome di una funzione Lua.Sono Lua stampa un messaggio di saluto e restituisce la lunghezza del nome.Poi OCaml stampa un messaggio circa la lunghezza del nome.

Esempio:

utente@desktop:~$ ./ciao.opt

Nome? Utente

Ciao, Utente.

Il tuo nome è di 4 lettere a lungo.

utente@desktop:~$

[Modifica]

Come un non-programmatore C, potrei implementare questo senza dover scrivere un intermediario C programma per passare i dati tra il Lua e OCaml?

Seguito è riportato un idea teorica di ciò che mi piacerebbe provare.Purtroppo, la linea 3 della ocaml_hello.ml avrei bisogno di sapere come chiamare la funzione definita in lua_hello.lua affinché il codice sia valido.

lua_hello.lua Definisce lua_hello, che stampa un argomento e restituisce la sua lunghezza.

1  function lua_hello (name)
2    print ("Hello, "..name..".")
3    return (string.len (name))
4  end

ocaml_hello.ml OCaml che richiede il nome, chiama la funzione Lua, e stampa il valore di ritorno.

1  let () = print_string "Name? "; flush stdout in
2  let name = input_line stdin in
3  let len  = Lua_hello.lua_hello name in
4    Printf.printf "Your name is %d letters long." len; flush stdout;;
È stato utile?

Soluzione

Io non sono a conoscenza di un maturo set di associazioni per l'incorporamento del C attuazione del Lua in OCaml.Un immaturo set di associazioni, è stato pubblicato il Caml mailing list nel 2004.

Se si desidera utilizzare la ML di attuazione, si possono trovare alcuni esempi in una carta chiamata ML Modulo Mania.ML di attuazione, a differenza del C attuazione, garanzie di sicurezza, ma per farlo utilizza molto lo scorbuto trucchi ML modulo di sistema.Se ti stai chiedendo domande di base, probabilmente si vuole evitare questo.

Nel tuo esempio è un po ' difficile indovinare dove si desidera che la funzione per venire da.Io suggerisco di chiedere un esempio in C o dare alla gente un esempio in C e chiedere come si potesse essere realizzato in OCaml (anche se credo che le associazioni sono un problema).


Modifica

In risposta alla nuova versione della domanda, è una cosa piuttosto complicata.Il consueto modello è che si potrebbe mettere Lua in carica, e si sarebbe chiamata Objective Caml codice Lua.Si sta mettendo a Caml in carica, che rende le cose più complicate.Ecco uno schizzo di ciò che le cose potrebbero essere del tipo:

let lua = Lua.new()  (* create Lua interpreter *)
let chunk = LuaL.loadfile lua "hello.lua" (* load and compile the file hello.lua *)
let _ = Lua.call lua 0 0 (* run the code to create the hello function *)
let lua_len s =
  (* push the function; push the arg; call; grab the result; pop it; return *)
  let _ = Lua.getglobal lua "lua_hello" in
  let _ = Lua.pushstring lua s in
  let _ = Lua.call lua 1 1 in
  let len = Lua.tointeger lua (-1) in
  let _ = Lua.pop lua 1 in
  len

let () = print_string "Name? "; flush stdout
let name = input_line stdin
let len  = lua_len name
Printf.printf "Your name is %d letters long." len; flush stdout;;

Di nuovo, non so dove si ottiene le associazioni per la Lua e LuaL i moduli.

Altri suggerimenti

Su ulteriore riflessione, non so se si può fare questo con l'ufficiale di C attuazione del Lua, perché penso OCaml ritiene che possiede main().Devi scoprire se OCaml potrebbe essere confezionato come una libreria da un C programma principale.

Per un esempio di mettere Lua-ML responsabile, si può ottenere Lua-ML autonomo da Cminusminus.org e si può anche controllare gli esempi in di carta sul Lua-ML così come il codice sorgente per la QC-- compilatore di per sé.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top