Мне нужно провести интеграционное тестирование. На данный момент у меня есть несколько сценариев, которые запускаются один раз для каждой сборки, которые создают базу данных, если она не существует, и заполняют ее.
Я подумал, что было бы лучше, если бы я мог добавить файл базы данных в тестовый проект, а затем просто заполнить и очистить базу данных соответственно. Даже если это не лучший способ Я наткнулся на назначение на основе Haskell, которое требует определения карты и фильтра в терминах foldr. Ради жизни я '...
Я немного занимаюсь самостоятельным изучением функциональных языков (в настоящее время использую Haskell). Я наткнулся на назначение на основе Haskell, которое требует определения карты и фильтра в терминах foldr. На всю жизнь я не совсем понимаю, как это сделать.
Например, когда я определяю функцию карты вроде:
map' :: (a -> b) -> [a] -> [b]
map' f [] = []
map' f (x:xs) = foldr (\x xs -> (f x):xs) [] xs
, я не знаю, почему всегда игнорируется первый элемент списка. Это означает, что:
map' (*2) [1,2,3,4]
приводит к [4,6,8] вместо [2,4,6,8]
Аналогично, моя функция фильтра:
filter' :: (a -> Bool) -> [a] -> [a]
filter' p [] = []
filter' p (x:xs) = foldr (\x xs -> if p x then x:xs else xs ) [] xs
при запуске как:
filter' even [2,3,4,5,6]
приводит к [4 , 6] вместо [2,4,6]
Почему это так? И как СЛЕДУЕТ определять эти функции, чтобы получить ожидаемые результаты? Я предполагаю, что с моими лямбда-выражениями что-то не так ...