Как создать логический список булевых зависит от вставленного счетчика и списка в f # - PullRequest
1 голос
/ 19 января 2012

Мне нужен код, который создает логический список в зависимости от вставленного списка и количества.Например, когда пользователь дает Список [0,1,2,3,4,5,6,7,8,9,10] и count = 2 , тогда кодделает bool List [true, false, true, false, true, false, true, false, true, false, true]

Когда count = 3 , тогда этосоздаст bool List [true, false, false, true, false, false, true, false, false, true, false]

Если count = 4 , то [true, false, false, false, true, false, false, false, true, false] и так далее ...

Я написал следующий код, но я думаю,что этот код неверен, я новичок в f #, поэтому мне нужна ваша помощь.Благодарю.

   let Group (s1 : List) (c : int) =
        let lenght = List.length(s1)
        (lenght)
           let rec MakeBool (count : int) (boolist : List) =
                while lenght > 0 do
                    if lenght % count = 0 then boolist = true::boolist 
                    if lenght % count <> 0 then boolist = false::boolist    
                    lenght = lenght - 1
                    MakeBool count boolist

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Использование функции старшего разряда (рекомендуется):

let group ls c = 
    ls |> List.mapi (fun i _ -> i%c = 0)

Прокручивая свою собственную функцию:

let group ls c =
 let length = List.length ls    
 let rec makeBool count acc =
  if count = length then acc // Come to the end of ls, return the accummulator
  elif count%c=0 then // Satisfy the condition, prepend true to the accummulator
    makeBool (count+1) (true::acc)
  else  // Otherwise prepend false to the accummulator
    makeBool (count+1) (false::acc)
 List.rev (makeBool 0 []) // The accummulator is in backward order, reverse it
1 голос
/ 19 января 2012

Как это?

let Group l c =  [ for l' in  0..l  -> (l' % c) = 0 ] 

Подпись Group : int -> int -> bool list

  • [a..b] создает список целых чисел от a до b (оба включительно)
  • [для x в a..b -> f (x)] делает то же самое, но применяет f к каждому элементу.
  • (a% c) = 0 просто проверяет, является ли a модулем c.

// H

...