Haskell中的函数(特别是交换函数)

时间:2016-04-24 01:11:18

标签: haskell functional-programming ghc

好吧我知道之前已经问过这个问题,但没有答案编译过。我研究过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,我知道它不是最新版本,但它也不是一个非常旧的版本,所以它不应该在这里有所作为, 应该是?任何和所有的帮助将不胜感激。谢谢。

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

您可能不了解其工作方式,并且会使用您无法了解的课程或无论如何都不会使用 - 这是设计的:您应该删除实施并插入您的自己的。