Проблемы с Haskell Beginner, понимание списка с одним вводом - PullRequest
1 голос
/ 10 октября 2019

Я новичок в программировании на Haskell и в целом. Я работаю в лаборатории и застрял в моих вопросах понимания списка.

проблема в том, чтобы создать функцию, которая находит все нечетные числа меньше 200, которые делятся на 3 и 7, используя только понимание списка

это мой код:

oddsDivisible3and7 :: Integer -> Integer -> Integer -> Integer -> [Integer] 
oddsDivisible3and7 xs = [x | x <- [1..xs],x mod 3 == 0 && x mod 7 == 0,x < 200]

и ошибки, которые он выдает:

• Couldn't match expected type ‘(Integer -> Integer -> Integer)
                                -> Integer -> Integer’
              with actual type ‘Integer’  
• The function ‘x’ is applied to two arguments,
  but its type ‘Integer’ has none
  In the first argument of ‘(==)’, namely ‘x mod 3’
  In the first argument of ‘(&&)’, namely ‘x mod 3 == 0’

с другим блоком для mod 7

, не ищущего письменную функцию, мне просто нужно некоторое руководство.

1 Ответ

2 голосов
/ 10 октября 2019

Есть несколько ошибок типа и несколько ошибок синтаксиса, позвольте мне показать:

oddsDivisible3and7 :: Integral a => a -> [a]
oddsDivisible3and7 n = [x | x <- [1..n],
 x `mod` 3 == 0 && x `mod` 7 == 0 && x < 200 && x `mod` 2 /= 0]

в первую очередь тип должен быть: Integral a => a -> [a]

Затем вы хотитеделится на 3, 7 и коэффициент (не делится на 2), и все меньше, чем 200.

пример:

oddsDivisible3and7 500
=> [21,63,105,147,189]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...