reduce خیلی شبیه به fold عمل میکنه ، با این تفاوت که مقدار اولیه accumulator رو مشخص نمی کنیم و در ضمن نوع بازگشتی تابع از جنس اجزای لیست باید باشه.
بزارید با مثال بگم ، اگر شما یک لیست از اعداد داشته باشید و بخواهید مجموع اونها رو حساب کنید از شکل زیر استفاده می کنیم :
val myList = List(1,2,3,4,5)
myList.reduce( (acc,item) => acc+item)
این نهایتا به ما یک Int بر میگردونه ، حالا فرض کن می خواهیم رشته چسبیده اینها به هم رو بدست بیاریم با تابع fold اینکار رو میکنم :
val anotherList = List(1,2,3,4,5)
anotherList.fold("")((acc,item)=> String.valueOf(acc)+String.valueOf(item))
می بینیم که میتونیم مقدار String رو برگردونیم از طریق fold ولی همچین کاری رو با reduce نمیشه انجام داد. (فک میکنم بشه گفت reduce نوع خاصی از fold هست)