Sto sviluppando alcuni algoritmi in OCaml che richiedono alcune parti da "innestare" in modo che parte del calcolo sia lasciata a specifici computatori.Utilizzo di funtori come interfacce in OCaml
solo per fare un esempio supponiamo di avere una firma come questo:
module type Algorithm = sig
val feed : float -> unit
val nth : int -> (float -> float)
end
E due diverse implementazioni che saranno Alg1
e Alg2
. Questo modulo Algorithm
dovrebbe rappresentare l'interfaccia per varie implementazioni come queste due.
Ora ho bisogno di un altro componente, chiamiamolo Executor
che sarà il modulo che utilizza Alg1
o Alg2
throught la loro interfaccia ..
Leggendo funtori sembra che avrei bisogno di un funtore che prende un Algorithm
e produce a ConcreteExecutor
con un'implementazione specifica dell'algoritmo di cui ho bisogno. In modo che Executor
è una sorta di modulo parametrizzato su uno dei suoi componenti ..
Ho ragione? È il modo migliore per ottenere ciò di cui ho bisogno? Mi chiedo thinkgs come questi perché provengo da uno sfondo Java/C++, quindi sono abituato a utilizzare interfacce e classi astratte e ho bisogno di entrare in questo problema di astrazione del modulo/modulo nel modo corretto.
Qual è la sintassi corretta per ottenere ciò che voglio?
Grazie in anticipo
Questo è davvero un grande uso di funtori. Li uso in un'applicazione di generazione di labirinti. Collega un algoritmo e una rappresentazione a labirinto e sei fuori. Sto ancora lavorando all'output che potrebbe essere un altro functor per supportare SVG, GraphViz, PDF e PNG. – nlucaroni
@nlucaroni - il codice per l'applicazione di generazione del labirinto è disponibile ovunque? – aneccodeal