Squeak.ru - шаблоны программирования

поиск элементов в списке и возвращаемые строки - haskell

Привет, я хочу отобразить имена собак, которые гуляли 0 минут на второй день.

type Dogs = (String, Float, Float, [Int]) -- Dog,Age,Weight,Time walked daily


testData :: [Dogs]
testData = [("Morris", 5, 8, [0,0,5,8,8,0,0]), 
        ("Tinks", 3, 10, [12,8,15,0,0,0,2]), 
        ("Cash", 6, 11, [0,6,5,0,0,0,3]), 
        ("Lou", 5, 17, [0,2,10,7,8,2,2]),
        ("Kobi", 10, 12, [0,0,8,3,6,7,5]) 
        ("Nala", 7, 8, [8,16,20,3,4,9,2])] 

Таким образом, на выходе будут Моррис и Коби, поскольку у них 0 секунд в списке, но я не знаю, как это сделать, я совсем новичок в haskell. Я понимаю, что я должен использовать !! 1, чтобы получить второй элемент из списка, но я не знаю, как это сделать для нескольких списков в кортежах в списке, а затем вывести в виде строки для имен. Любая помощь будет оценена спасибо

10.05.2020

  • Подсказка: взгляните на filter. 10.05.2020
  • В качестве альтернативы, понимание списка: [dog | dog <- dogs, isSecondDayZero dog] 10.05.2020
  • В начале не пытайтесь решить проблему с помощью одной функции. Подумайте о более мелких функциях, которые можно составить. Например, вы можете написать функцию, которая по заданному Dogs возвращает время, пройденное за второй день. Учитывая эту функцию, вы можете использовать filter для выбора кортежей, удовлетворяющих определенному условию (time walked == 0). Наконец, вы можете использовать map для извлечения имен из полученного списка собак. 10.05.2020
  • руководство по простой композиции функций: 1) функции типа (a->a) всегда могут быть составлены с помощью (.), далее по простоте идут такие функции, как (a->b) 2) вы всегда можете превратить (... -> a -> b) в (a -> b) с помощью каррирования 3) map для изменения элементов списка или любого Traversable, fold и др., чтобы превратить список в единое значение без явных циклов. 4) другие помощники, такие как filter, также существуют, но они более специфичны и обычно могут быть выражены в терминах map и fold. 10.05.2020
  • Я голосую за закрытие этого вопроса, потому что Stack Overflow не является службой написания кода. 10.05.2020
  • Я не согласен. Основанное в 2008 году, Stack Overflow является крупнейшим и пользующимся наибольшим доверием онлайн-сообществом для всех, кто занимается программированием, чтобы учиться, делиться своими знаниями и строить свою карьеру... 10.05.2020

Ответы:


1

Во-первых, вы можете создать отдельную функцию для определения того, выполняется ли искомое условие:

isDay2Walked :: Dogs -> Bool
isDay2Walked (_, _, _, (_:x:_)) = x /= 0 -- pattern matching would be more elegant than (!! 1)
isDay2Walked _ = False -- return something if there is no information about the second day

Затем используйте этот предикат в фильтре по вашему списку и извлеките первый элемент - имя:

getDogName :: Dogs -> String
getDogName (name, _, _, _) = name

getDogsNotWalkedOnDay2 :: [Dogs] -> [String]
getDogsNotWalkedOnDay2 = map getDogName . filter (not . isDay2Walked)
10.05.2020
  • Привет, спасибо, я пробовал это, но я продолжаю получать ошибку синтаксического анализа для '=' в блоке кода isDay2Walked (Dogs _ _ _ (_:x:_) = x /= 0 , я проверил наличие проблем с отступами, но я ничего не вижу. 10.05.2020
  • @laralouie345 А, да, извините, тип Dogs — это псевдоним простого типа для 4-х кортежей, а не конструктор данных с 4-мя аргументами, попробуйте отредактированную версию 10.05.2020
  • Таким образом, эта строка кода говорит, что если x не равно нулю, то это правда, что этот день был пройден правильно, поэтому isDay2Walked будет истинным, но затем вызов конечной функции с (not. isDay2Walked) получает ложь и ищет данные в список, который определяет эта инструкция? Спасибо 10.05.2020
  • @laralouie345 Да, составляя функцию not с нашим предикатом, мы фильтруем список для тех элементов, для которых он оценивается как False. То есть мы получаем тех собак, которых не выгуливали на второй день. 10.05.2020
  • Я получил эту ошибку с новой версией Couldn't match expected type ‘([Char], Integer, Integer, [Integer]) -> Dogs’ with actual type ‘([Char], Integer, Integer, [Integer])’ • The function ‘("Kobi", 10, 12, [0, 0, 8, 3, ....])’ is applied to one argument, but its type ‘([Char], Integer, Integer, [Integer])’ has none, когда я попытался загрузить модуль в ghci, что меня сбивает с толку, я сделал ошибку в testData? 10.05.2020
  • @laralouie345 Пропущена запятая в строке с Коби 10.05.2020
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...