He estudiado el lenguaje de programación Haskell y ahora descubrí que es posible llamar a las funciones de Haskell desde los programas C. Durante mis estudios en Haskell, creé un contador de frecuencia de palabras con Haskell y me gustaría intentar llamar a esa función desde un programa en C, pero no sé cómo hacerlo. He encontrado estos dos sitios web en haskell.org:¿Cómo elegir el tipo de Haskell C correcto?
Foreign C types (Haskell module)
A pesar de eso, estoy un poco perdido los tipos de usar. Mis programas haskell es una lista de las siguientes funciones:
putStr. unlines. mapa testF. sortedTree
donde mis propias funciones
- testF es el tipo de testF :: Show a => ([Char], a) -> [Char]
- sortedTree es el tipo de sortedTree :: (Num a, Ord a) => [Char] -> [([Char], a)]
Estoy bastante seguro de que necesito convertir los tipos de cada función a tipos C, en lugar de convertir solo la función que llama a la tubería. El tipo de la función "principal" es
fileFreq :: [Char] -> IO()
Además de todo esto, estoy usando un árbol binario Haskell, que no es el tipo preludio.
Aquí es todo el código Haskell:
module WordCounter where
import List
import Char
import Foreign.C.Types
data BTree a = Tip | BNode a (BTree a) (BTree a) deriving Show
insertFreq x Tip = BNode (x,1) Tip Tip
insertFreq x (BNode (q,p) l r) | (map toLower x)==(map toLower q) = BNode (q, p+1) l r
| otherwise = BNode (q,p) l (insertFreq x r)
tlist :: BTree a -> [a]
tlist Tip = []
tlist (BNode x l r) = concat [tlist l, [x], tlist r]
sortedTree x = sortBy (\(x,y) (p,q) -> compare q y) (tlist (foldr insertFreq Tip (words x)))
testF (x, n) = concat (x : ":" : " \t\t\t " : show n : [])
concord = putStr . unlines . map testF . sortedTree
fileFreq filename = do { text <- readFile filename; concord text }
Puede alguien guiarme un poco con esto?
pregunta frío, por desgracia nadie en esta matriz parece ser útiles http://asset.soup.io/asset/0750/2820_15d5_960.jpeg espero que no es ofensivo, solo divertido mientras esperas una respuesta razonable. +1 por supuesto – stacker
Esto no está claro para mí. ¿Podría ser explícito sobre qué función Haskell desea llamar desde C? Imagina que tienes las ataduras funcionando, ¿cómo se ve una simple llamada C? –
@stacker: No tiene precio: D – Skurmedel