내가 이해한 바로는 reduce함수는 첫번째 인자와 다음 인자를 결합하는 형태로 그 결과값에다가 또 다른 다음인자, 다음인자를 반복해서 차례대로 연산을 수행하도록 도와주는 메서드인 것 같다.
[정의]
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
일단 반복문을 사용해야할 것 같다는 강렬한 느낌적인 느낌이 든다.
리스트를 임의로 만들어서 연습해보자.
let list = [3, 4, 5]
let add = reduce(list, "+")
prind(add) // 결과값: 12
let subtract = reduce(list, "-")
print(subtract) // 결과값: -6
let multiply = reduce(list, "*")
print(muptiply) // 결과값: 60
이렇게 reduce가 동작하기 위해서는 reduce 함수를 내가 새로 정의해줘야 하는데...
일단 여기서 위의 아규먼트 레이블이란 무엇인가.
파라미터(Parameter, 매개변수) 와 아규먼트 레이블(Argument labels, 전달인자)을 항상 헷갈려 혼동하고 있었는데 정리하고 넘어가보자.
파라미터는 함수의 정의 에서, 아규먼트 레이블는 함수의 호출 에서 사용하는 호칭으로
파라미터(매개변수)는 함수에서 어떤 이름 으로 사용할 것인지를 명시 하고, (인자)
아규먼트 레이블(전달인자)는 어떤 값 을 보내줄 것인지를 나타낸다. (인수)
아규먼트 레이블은 함수 정의부에 파라미터와 함께 사용하는 것이고, 와일드 카드 패턴(_)으로 생략 또한 가능하다.
그렇다고 한다.
Anyway,
for반복문을 사용하여 +연산과 ×(*)연산은 구현했으나 -연산 값이 틀리게 나온다, 어디가 잘못되었을까?
let numbers = [3, 4, 5]
var sum = 0
for number in numbers{
sum += number
}
print(sum) // 12
var subtract = 0
for number in numbers{
subtract -= number
}
print(subtract) // -6 이 나와야 하는데 -12 값으로 출력된다. 그런것으로 보아 (-3)+(-4)+(-5) 로 연산되어지는게 분명하다.
var multiply = 1
for number in numbers{
multiply *= number
}
print(multiply) // 60
reduce 함수 구현은 여기에서 마무리 짓고, 튜터님께 막힌 부분에 대해서 여쭤보기로 하겠다. 해결하게 되면 이어서 포스팅 할 예정.
많은 도움이 되었습니다, 감사합니다.