好吧我知道之前已经问过这个问题,但没有答案编译过。我研究过Haskell函数教程无济于事。基本上我只是想知道如何在Haskell中声明一个函数以及如何调用它。我发现的大部分教程都是用ghci来回答如何做到这一点,我理解这应该基本相同,但是我需要在.hs文件中编写这个并用ghc编译来完成学校作业。基本上我喜欢这样的事情:
main = do
let list = [1,2,3,4]
-- declare swap
swap (list !! 0) (list !!2)
-- Or
swap 1 2 list
我使用的是ghc版本7.4.1,我知道它不是最新版本,但它也不是一个非常旧的版本,所以它不应该在这里有所作为, 应该是?任何和所有的帮助将不胜感激。谢谢。
答案 0 :(得分:1)
因为你的主要问题是关于写.hs文件,请看看这个:
module Main where
swap :: Int -> Int -> [a] -> [a]
swap i j xs = map f (zip [0..] xs)
where f (k,x)
| k == i = xj
| k == j = xi
| otherwise = x
xi = xs !! i
xj = xs !! j
main :: IO ()
main = print (swap 1 2 [1,2,3,4])
你可以将它复制并粘贴到一个空文件中并保存为swap.hs
,你应该可以编译并加载到GHCi中。
正如您所看到的那样,文件以module
- 声明开头,然后它定义了您的swap
函数(但是实现更多地涉及到您的想法 - 实际上这个是不是最有效的一个。)
它首先介绍了类型签名(这不是必需的,但通常我们在顶层函数中执行),从下一行开始实现函数。
最后,它提供了main :: IO()
计算,如果你想将它编译成可执行程序,这是必要的。
此计算仅使用swap
并打印出示例的结果。
由于这是家庭作业,你应该自己重新实施至少swap
。
您可能不了解其工作方式,并且会使用您无法了解的课程或无论如何都不会使用 - 这是设计的:您应该删除实施并插入您的自己的。