Вы задали несколько вопросов, поэтому я отвечу им один за другим.
Вопрос 1: почему компилятор мне сказал Instance of Num [Int] required for definition of sum1
?
Вы создали функцию под названием sum1
с типом [Int]->[Int]
. Однако рассмотрим строку sum1 [] = 0
: это возвращает Int
, а не [Int]
. Решение этой проблемы состоит в том, чтобы изменить линию на sum1 [] = []
.
Вопрос 2: что означает (x:xs
)?
Haskell позволяет вам выполнить что-то, что называется pattern matching
. Не вдаваясь в подробности, так как есть много лучших объяснений, эффект заключается в том, что x
- это первый элемент списка, а xs
- это остальная часть списка, то есть вы очистили первый элемент список.
Например, если вы назвали sum1 [1,2,3]
, x
будет 1
и xs
будет [2,3]
.
Вопрос 3: если мы хотим получить n-й элемент списка, как его получить?
Обычный способ сделать это, чтобы использовать !!
функцию - которая инфиксальный, то есть, вы обеспечиваете как левый и правый аргумент так же, как вы бы для +
или *
. Например, [1,2,3]!!1
вернет 2
.
Теперь, если это помогло прояснить ситуацию, вы должны заметить, что у вашего определения функции есть некоторые проблемы. Я не уверен, что вы хотели бы самостоятельно их обработать или нет.
благодаря его решаемому всему Probs :) – Sudantha
благодарственного oftz за то, что выглядит довольно :-) Я одобряю вашу правку. – erisco
+1 хорошие простые ответы на каждый заданный вопрос. –