PowerShell: функционал: уменьшать: Как инициализировать аккумулятор уменьшения? - PullRequest
0 голосов
/ 17 января 2020

Я хочу использовать функциональную функцию «уменьшить» для вычисления таких вещей, как факториал числа. например, факториал 5 равен 5x4x3x2x1 = 120. В Ruby я могу сделать что-то вроде:

# factorial1.rb

(1..5).reduce{|accumulator,element| accumulator*element}

В PowerShell я бы сделал что-то вроде:

# factorial.ps
# ------ Install this library before using the "reduce" function
# Install-Module -Name functional

1..5 | reduce {$a*$b}  

В обоих языки, ответ равен 120, и предполагается, что аккумулятор является целым числом с начальным значением первого элемента в диапазоне.

Если я переопределил факториал, чтобы иметь начальное значение 10, в Ruby Я бы закодировал его как

# factorial2.rb
# (1..5).reduce    {|accumulator,element| accumulator*element} #uninitialized accumulator
  (1..5).reduce(10){|accumulator,element| accumulator*element}

. Это дает ожидаемый ответ 1200.

ВОПРОС 1 : Как инициализировать аккумулятор «Reduce» в PowerShell ?

В следующем сценарии я хочу создать список факториалов. Если бы я закодировал его в Ruby, я мог бы инициализировать аккумулятор сокращения с [1] (потому что 0! Равен 1), что привело бы к следующему коду:

# factorial.rb
# (1..5).reduce     {|accumulator,element| accumulator*element}  #uninitialized accumulator
  (1..5).reduce([1]){|accumulator,element| accumulator << accumulator[-1]*element}

Вывод выглядит примерно так

   => [1, 1, 2, 6, 24, 120]

ВОПРОС 2 : Как использовать расширяемый массив для инициализации аккумулятора для функции PowerShell «уменьшить» «функционального» модуля?

1 Ответ

1 голос
/ 17 января 2020

Эти вопросы относятся c к стороннему модулю functional, который вы предположительно загрузили из PS Gallery . При загрузке менее 300 и только пара фиксирует на GitHub , это очень маленький проект.

Я быстро взглянул на базу кода и не нашел способа сделать то, что вы искали, но функциональное программирование - не моя сильная сторона. Может быть, вы можете найти то, что вы ищете в кодовой базе , и я просто пропустил это.

В противном случае поиск другого стороннего модуля или заполнение запроса функции могут быть другими способами.

...