我研究了一些 Haskell 编程语言,现在我发现可以从 C 程序中调用 Haskell 函数。在我学习 Haskell 期间,我用 Haskell 创建了一个词频计数器,我想尝试从 C 程序中调用该函数,但我不知道该怎么做。我在 haskell.org 上找到了这两个网站:
尽管如此,我还是有点迷失要使用哪种类型。我的 haskell 程序是以下功能的管道:
putStr 。取消线。映射 testF 。排序树
我自己的功能在哪里
- testF是 testF 的类型:: Show a => ([Char],a) -> [Char]
- sortedTree是sortedTree :: (Num a, Ord a) => [Char] -> [([Char],a)] 的类型
我很确定我需要将每个函数的类型转换为 C 类型,而不是只转换调用管道的函数。“main”函数的类型是
fileFreq :: [字符] -> IO ()
除此之外,我正在使用 Haskell 二叉树,这不是前奏类型。
这是整个 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 }
有人可以指导我吗?