我在Haskell中有以下功能:
invertedSum :: Integer -> Integer
invertedSum n = n + (read . reverse . show) n
我需要知道为了使数字为capicua必须进行的总和数量。也就是说,
invertedSum 1999 = 11990 (1999+9991)
invertedSum 11990 = 21901
invertedSum 21901 = 32813
invertedSum 32813 = 64636
invertedSum 64636 = 128282
invertedSum 128282 = 411103
invertedSum 411103 = 712217
isCapicua :: Integer -> Bool
isCapicua n | show n == (reverse . show) n = True
| otherwise = False
isCapicua 712217 == True
所以,我想生成以下列表,但我不知道如何。
sumUpToCapicua 1999 = [11990, 21901, 32813, 64636, 128282, 411103, 712217]
genericLength (sumUpToCapicua 1000000079994144385) == 259
答案 0 :(得分:2)
您已经拥有类型为invertedSum
的函数Integer -> Integer
。如果我正确理解了这个问题,您可以多次应用它,从特定的Integer
开始(例如1999
)。
您可以将iterate
用于此目的。它的类型为:
Prelude> :t iterate
iterate :: (a -> a) -> a -> [a]
换句话说,它将采用任何函数a -> a
以及初始值a
,并生成无限 a
值列表
在您的情况下,invertedSum
的类型为Integer -> Integer
,您要使用的初始值(例如1999
)也属于Integer
类型,这一切都适合:a
将是Integer
。
尝试使用invertedSum
,例如1999
iterate
take 10
。请注意,这会生成无限列表,因此如果您在GHCi中进行此实验,则可能需要使用例如 model mvclearn.Models.Employee
@{
ViewBag.Title = "menu";
}
@{
Layout = null;
}
<link href="~/Content/bootstrap.css" rel="stylesheet" />
<style>
.error {
color: red;
}
</style>
<div class="container">
<div class="container"style="width:30%">
@using (Html.BeginForm("save", "Test", FormMethod.Post))
{
@Html.DropDownListFor(m => m.Service_Code, Model.ser_code, "--select--", new { @class = "form-control", @placeholder = "Enter Service code" })
@Html.ValidationMessageFor(m => m.Service_Code, "", new { @class = "error" })
@Html.TextBoxFor(m => m.Service_Name, new { @class = "form-control", @placeholder = "Service Name" })
@Html.ValidationMessageFor(m => m.Service_Name, "", new { @class = "error" })
<input type="submit" value="submit" class="btn-block" />
}
限制生成的值的数量。