Hom4ikTop4ik / 23217_MartynovBogdan

0 stars 0 forks source link

Семинар 5 (map, множества[nub, union, intersection] и калькулятор из "Семинар 4") #3

Closed denisenes closed 7 months ago

denisenes commented 8 months ago
intersection' :: Eq a => [a] -> [a] -> [a] -- a b >>> (a ∩ b)
intersection' xs ys = foldl (\res x -> res ++ (if (elem x ys) then [x] else [])) [] xs

Советую быть очень осторожным с конкатенациями, особенно, если первый элемент конкатенации в среднем достаточно большой. Глянь тут описание: тудумс

Задача 5: во-первых, много if-ов это не очень красиво, тут отлично бы вписались гарды (охранные выражения) Во-вторых, смотрю ты прям любишь выражения в скобки обрамлять. Будущий LISP-программист походу) image

Почему-то 5 задача падает при таком вызове optimizer ["inc", "dec"]... optimizer' вроде работает нормально

Оценка за задачки: 4.7, можешь поправить optimizer и получить макс балл

Hom4ikTop4ik commented 8 months ago

1) "optimizer" updated. 2) joke: exe.exe.exe.exe

denisenes commented 8 months ago

optimizer ["sqrt", "inc", "dec", "dec", "double"] зависает

Сложное очень решение получилось, легко багу поймать. Возможно, стоит как-то упростить

denisenes commented 8 months ago

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

Hom4ikTop4ik commented 7 months ago

Исправил

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

denisenes commented 7 months ago

Круто, теперь и просто, и работает корректно

denisenes commented 7 months ago

Только пожалуйста, старайся не умещать все функцию в одну строку, сложно читать. С помощью отступов можно сделать функцию читабельнее например так

optimizer :: [String] -> [String]
optimizer arr = y
  where
    (x:y) = reverse (foldl (\(first:acc) x ->
        if ((first, x) == ("inc", "dec")) || ((first, x) == ("dec", "inc"))
          then acc
          else x:(first:acc)
      ) [""] arr)
denisenes commented 7 months ago

Оценку повышаю до 5