Ошибка в библиотеке SCHOOL

Кусок кода: Result[i, 0] := a; Result[i, 1] := b; Result[i, 2] := c; Result[i, 3] := d; Result[i, 4] := d; Result[i, 5] := f(a, b, c, d, e);

Как видите в [i, 4] пишется не то.

Ну Вы хоть бы сказали, что это за функция. Как люди искать-то должны?

А так это TrueTable для 5 переменных

Это не ошибка, а описка. Код размножался копированием и строка Result[i, 4] := d; оказалось не поправлена, должно быть := e;

Вообще это стандартная проблема при дублировании кода. Особенно если цель была сделать хороший пример для новичков - так делать не стоит. Лучше как-то так:

##

// Внутренняя функция, не доступная вне модуля
function TrueTable(n: integer; f: function(inp: array of boolean): boolean): array[,] of boolean;
begin
  // Явно больше чем максимальный размер массива результата
  if n>31 then raise new System.NotImplementedException;
  var res_c := 1 shl n;
  Result := new boolean[res_c, n+1];
  
  for var bits := 0 to res_c-1 do
  begin
    var res := new boolean[n+1];
    begin
      var x := bits;
      for var i := n-1 downto 0 do
      begin
        res[i] := x and 1 <> 0;
        x := x shr 1;
      end;
    end;
    res[n] := f(res);
    Result.SetRow(bits, res);
  end;
  
end;

// Внешняя функция, пред-описанная в интерфейсе модуля
function TrueTable(f: function(a, b: boolean): boolean) :=
TrueTable(2, \(a,b)->f(a,b));

TrueTable((a,b)->a and b).Println(6);

Единственный дубль кода это \(a,b)->f(a,b), но тут правая часть является точной копией левой, без изменений - поэтому простое Ctrl+C, Ctrl+V уже не даст допустить описку.

сможете исправить к следующему релизу?

Один символ поправить могут и разработчики компилятора. Я релизы не выпускаю, я только отдаю разработчикам исходный текст библиотеки. В данном случае не вижу смысла что-то им пересылать. Если потребуют переслать - отправлю, конечно.

2 лайка

Интересные методы разработки. Cvs, тесты, багтрекер… не, не слышали :slight_smile:

Чем пытаться неумело язвить, лучше бы написали для проекта что-нибудь полезное. Диванных критиков и без Вас тут достаточно.

Он для этого сюда и пришёл.