要求我创建一个haskell函数,该函数将执行以下操作:
$query = "INSERT INTO `User` (`email`, `password`) VALUES ('".mysqli_real_escape_string($link, $_POST['email'])."', '".mysqli_real_escape_string($link, $_POST['password'])."')";
if (mysqli_query($link, $query)) {
$query = "UPDATE `User` SET password = '".md5(md5(mysqli_insert_id($link)).$_POST['password'])."' WHERE id = ".mysqli_insert_id($link)." LIMIT 1";
mysqli_query($link, $query);
} else {
echo "<p>There was a problem signing you up - please try again later.</p>";
}
从本质上讲,它会将相同的连续术语分组
我应该在以下时间使用取放物品:
group [1,1,2,3,3] = [[1,1],[2],[3,3]]
group [] = []
这就是我所拥有的。
以上方法适用于单个元素位于结尾group [] = []
group (x:xs) = (takeWhile cond xs ++ [x]) : group (dropWhile cond xs)
where
cond = (\x -> x == head xs)
的情况,但不适用于中间元素:group [1,1,2] == [[1,1],2]
(应为group [1,1,1,2,4] == [[1,1,1],[4,2]]
我在功能上有什么错误?
答案 0 :(得分:5)
简短的回答:您的错误是在您的情况下使用head
。您想与x
进行比较,而不是head xs
。
通常,还要注意
something ++ [x]
在这里不像x : something
那样实用(虽然实际上并不重要,但效率很高),因为顺序无关紧要,f = \x -> something
的函数实际上应该写为f x = something
,使用部分应用的==
可以轻松地重写函数cond:
group [] = []
group (x:xs) = (x : takeWhile cond xs) : group (dropWhile cond xs)
where cond = (==) x
这将产生group [1,1,1,2,4]
的预期结果。