Определить функцию удаления - PullRequest
0 голосов
/ 31 марта 2011

У меня проблемы с этим упражнением, пожалуйста, помогите!

Определите функцию удаления, которая принимает целое число и список целых чисел в качестве входных данных и возвращает список, полученный путем удаления первое вхождение целого числа в списке;

delete :: Int -> [Int] -> [Int]

Ответы [ 4 ]

6 голосов
/ 31 марта 2011

Я изучаю Haskell, поэтому мой ответ не является авторитетным.Вместо того, чтобы публиковать код, который я написал, чтобы ответить на ваш вопрос, я пытаюсь написать, как я смотрел на проблему.

Я подошел к нему, рассматривая различные случаи (я обнаружил, что это помогает с Haskell):

  1. удаление всего из пустого списка ... это просто

  2. удаление чего-либо (x) из непустого списка (ys):

    2.1.x равен первому элементу ys?тогда я закончу ...

    2.2.в противном случае мне просто нужно удалить x из списка, начиная с первого элемента ys

5 голосов
/ 31 марта 2011

Думайте об удалении как о создании нового списка без соответствующего элемента, а не об удалении самого элемента.(звучит как домашнее задание, поэтому я не буду более конкретным, чем это:))

0 голосов
/ 31 марта 2011

Извините, что выдал ответ, но вот он, прямо из источника Data.List

delete :: (Eq a) => a -> [a] -> [a]
delete = deleteBy (==)

deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
deleteBy _  _ []     = []
deleteBy eq x (y:ys) = if x `eq` y then ys else y : deleteBy eq x ys

Обычно я бы описал это здесь, но если вы понимаете базовую рекурсию, если операторы, сопоставление с образцом, оператор : и частичное применение / каррирование, то это должно быть само за себя. Не стесняйтесь спрашивать, является ли какой-либо из них чуждым вам.

0 голосов
/ 31 марта 2011

сначала: объявите функцию (посмотрите, как работают объявления функций) - в зависимости от языка это выглядит примерно так:

array
delete( int input1, array input2 )
{
}

затем работайте над телом функцииЕсли вам нужны переменные, выполните манипуляции с массивом, чтобы вернуть полученный массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...