Как сломаться раньше, когда foldLeft поверх простого списка?

Это упрощенная версия моей проблемы, я хочу, чтобы складка не возвращала значение после того, как условие if выполняется в сгибе, где a.size == 7.

class test1 {

  def test(a : List[Int]): Int = {
    val list = a.foldLeft(if(a.size == 7) 1000 else 0)((b,a) => a + b )

    list
  }
}



object test1 extends App{
  val temp1 =  new test1()

  val list: List[Int] = List(1,2,3,4,5,6,7)

  println(temp1.test(list))


}

Как видите, условие выполняется на первом сгибе, но бывают случаи, когда оно может быть выполнено на втором или первом. Не уверен, куда идти отсюда, любая помощь будет оценена


person Gioan Nguyen    schedule 23.11.2016    source источник
comment
вам нужно будет реализовать свой собственный рекурсивный folderLeft и список процессов в ваших условиях   -  person Pavel    schedule 23.11.2016
comment
Привет, @PavelOliynyk, я не понимаю, что ты имеешь в виду, можешь мне показать?   -  person Gioan Nguyen    schedule 23.11.2016
comment
@PavelOliynyk Как мне использовать эту функцию, она хочет два списка, но у меня есть один :› извините, я все еще новичок   -  person Gioan Nguyen    schedule 23.11.2016
comment
Ответ обновлен. Не забудьте принять ответ!:)) Простое использование локальной лексической области видимости.   -  person Pavel    schedule 23.11.2016
comment
Более полный набор ответов можно найти здесь.   -  person jwvh    schedule 23.11.2016
comment
Отвечает ли это на ваш вопрос? Прервать досрочно   -  person pme    schedule 14.01.2020


Ответы (1)


Попробуйте следующий шаблон:

def Process(A: List[Int]) : Int = {

  def proces(a: List[Int], acc: List[Int]): Int = a match {
    case List () => -1
    case h :: tail => if (acc.length == 10) 1000 else proces (tail, h :: acc)
  }
  proces(A, List() )
}
person Pavel    schedule 23.11.2016