Как было предложено в комментариях, одним из подходов было бы сначала сгруппировать список в кортежи длины 3, используя прелюдии zip3
и tail
:
*Main> let xs = [0,1,5,2,3,7,8,4]
*Main> zip3 xs (tail xs) (tail (tail xs))
[(0,1,5),(1,5,2),(5,2,3),(2,3,7),(3,7,8),(7,8,4)]
Который имеет тип: [a] -> [b] -> [c] -> [(a, b, c)]
и [a] -> [a]
соответственно.
Далее вам нужно найти способ отфильтровать кортежи, где средний элемент больше, чем первый и последний. Одним из способов было бы использовать функцию Preludes filter
:
*Main> let xs = [(0,1,5),(1,5,2),(5,2,3),(2,3,7),(3,7,8),(7,8,4)]
*Main> filter (\(a, b, c) -> b > a && b > c) xs
[(1,5,2),(7,8,4)]
Который имеет тип: (a -> Bool) -> [a] -> [a]
. Это отфильтровывает элементы списка, основанные на булевом возврате из переданного предиката.
Теперь для последней части вам нужно извлечь средний элемент из фильтрованных кортежей выше. Вы можете сделать это легко с помощью функции Прелюдии map
:
*Main> let xs = [(1,5,2),(7,8,4)]
*Main> map (\(_, x, _) -> x) xs
[5,8]
Какой тип: (a -> b) -> [a] -> [b]
. Эта функция отображает элементы из списка типов a
в b
.
Вышеупомянутый код, сшитый вместе, будет выглядеть так:
largest :: (Ord a) => [a] -> [a]
largest xs = map (\(_, x, _) -> x) $ filter (\(a, b, c) -> b > a && b > c) $ zip3 xs (tail xs) (tail (tail xs))
Обратите внимание, что здесь я использовал typeclass Ord
, так как приведенный выше код должен сравниваться с >
и <
. Здесь все-таки держать его как Integer
.
Очень часто для WAMP
/ XAMPP
и других стеков использовать несколько файлов php.ini
- один для cli и один для web.
Поскольку вы завершаете ошибка из CLI попробует следующее:
php -i | grep "php.ini"
это выведет местоположение php.ini
, используемое для cli. Отредактируйте date.timezone
там.
Что касается веб-режима, создайте файл foo.php
в вашем «веб-каталоге» symfony, содержащем только «
<?php phpinfo(); ?>
И снова , найдите местоположение php.ini
и отредактируйте date.timezone
.
Нашел аналогичный способ исправить эту проблему, в то время как другие не сделали.
php -i | grep "php.ini"
cd ..
назад и cd
в /etc
, сделайте ls
в моем случае php .ini не отображается, только php.ini.default
sudo cp php.ini.default php.ini
sudo chmod ug+w php.ini
sudo chgrp staff php.ini
open .
Совет. Если вы не можете редактировать php.ini из-за некоторых проблем с правами доступа, затем скопируйте «php.ini.default» и вставьте его на свой рабочий стол и переименуйте его в «php.ini», затем откройте его и отредактируйте после шага 7. Затем переместите (скопируйте + вставить) его в / etc папка. Проблема будет решена. date.timezone = "Europe/Amsterdam"
Если вы не можете установить его правильно в своем php.ini
по какой-то причине, вы можете установить его как первое, что есть в вашем AppKernel, например.
class AppKernel extends Kernel
{
public function __construct($environment, $debug)
{
date_default_timezone_set('Europe/London');
parent::__construct($environment, $debug);
}
public function registerBundles()
{
$bundles = array(
....
);
}
....
}
Отредактируйте свой php.ini
(необязательно в /etc/php.ini
- используйте php -i | grep ini
, чтобы найти свою версию) и добавьте часовой пояс.
Например. для Америки / Нью-Йорка это будет:
date.timezone = "America/New_York"
Это было упомянуто, но это так же просто, как:
sudo cp /etc/php.ini.default /etc/php.ini
Вы не можете установить часовой пояс если он не может найти файл php.ini !!!!