如果奇数,Haskell会将参数相乘

时间:2016-05-09 17:39:44

标签: haskell

我希望我的代码从控制台参数中读取数字,并将偶数代码写回控制台。奇数应该乘以2以使它们成为偶数。为此我添加了方法evenify哪个检查与mod 2奇数或偶数。

我无法找到我正在制作的错误,很可能它只是某处的语法错误。这是我现在的代码:

import System.Environment

evenify :: [Integer] -> [Integer]
evenify n = if mod n 2 == 0 then n else n*2
main :: IO ()
main = getArgs >>= putStrLn . show . evenify . read . head
_ = main

错误是什么?

2 个答案:

答案 0 :(得分:2)

第一个问题是>>> 3(5*2) Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 3(5*2) TypeError: 'int' object is not callable >>> 3*(5*2) 30 具有错误的类型签名 - 因为它具有签名:

evenify

通过此更改,您的程序可以处理一个命令行参数 - 仅第一个参数。

要处理所有参数,请使用evenify :: Integer -> Integer

map

说明:

main = do args <- getArguments
          putStrLn $ show $ map evenify (map read args)

答案 1 :(得分:1)

引人注目的第一个错误

Folder01
 -folder-A
 -folder-B
 -file1.php
 -image.png
 -index.php

签名需要一个列表,但实现是针对标量的。