Плэнер-алгоритм, реализующий минимаксную процедуру
Рассмотрим сначала написанную на Плэнере функцию MIN_MAX, реализующую минимаксную процедуру. Аргументы этой функции: Instate  исходная позиция игры, для которой ищется наилучший ход; N    глубина поиска, т.е. количество ходов вперед. Вырабатываемое функцией значение  это дочерняя для Instate позиция, соответствующая искомому наилучшему ходу.
[define MIN_MAX (lambda (Instate N)
   [SELECT_MAX [MM_EVALP .Instate  0 T ]] )]
Функция  MIN_MAX использует две вспомогательные функции: SELECT_MAX и MM_EVALP. Первая функция, SELECT_MAX выбирает из своего единственного аргумента-списка, состоящего из позиций и их оценок, позицию с наибольшей оценкой:
[define SELECT_MAX (lambda (List)
  [prog (Elem Max_elem )
      [fin Max_elem .List]
   SM [cond([fin Elem List] [return [2 .Max_elem]])
           ([gt [1 .Elem] [1 .Max_elem]]
              [set Max_elem .Elem]) ]
     [go SM]  ] )]
Функция MM_EVALP с тремя аргументами является главной рекурсивной функцией, оценивающей вершины дерева игры по минимаксному принципу. На каждом шаге рекурсии она оценивает вершину-позицию Position, находящуюся на глубине Depth и имеющую тип Deptype: "ИЛИ" при  Deptype=Т  и  "И" при Deptype=(). Исходная позиция (корневая вершина дерева) имеет тип Т и находится на глубине 0. Значением функции MM_EVALP является либо вычисленная оценка вершины Position (при Depth>0) либо список дочерних для Position позиций с их числовыми оценками (при Depth=0). 
При работе MM_EVALP используются вспомогательные функции, определение которых зависит от конкретной игры: OPENING, вычисляющая для заданной позиции игры список дочерних вершин-позиций, и STAT_EST  статическая оценочная функция. 
[define MM_EVALP (lambda (Position Depth Deptype)
   [prog (D             %дочерняя позиция;
          (Movelist()) %список ходов-позиций);
          Pvalue Dvalue) %оценки текущей и дочерней 
                            позиций;
% 1:установка развилки, включающей все дочерние вершины текущей позиции(список () добавлен в развилку, чтобы "поймать" момент ее закрытия);
    [set D [among (<OPENING .Position> ())]]
% 2: если развилка закрыта - возврат функцией подсчитанной оценки;
    [cond ([empty .D]
            [return [cond ([eq .Depth 0] .Movelist)
                          (t .Pvalue) ]] )]
% 3: вычисление оценки очередной дочерней позиции: либо применение статической функции, либо рекурсивный спуск;
   [cond ([eq .Depth [- .N 1]] 
            [set Dvalue [STAT_EST .D]])
         (t [set Dvalue [MM_EVALP .D
                                [+ 1 .Depth]
                                [not .Deptype]]] )]
% 4:пересчет оценки текущей позиции по минимаксному принципу;
    [cond ([hasval Pvalue] [pset Pvalue
               [cond(.Deptype [max .Pvalue .Dvalue])
                    (t [min .Pvalue .Dvalue]) ]])
          (t [pset Pvalue .Dvalue]) ]
% 5: при необходимости пересчет для исходной позиции списка ходов(дочерних позиций) с их оценками;
  [cond([eq .Depth 0]
         [pset Movelist(!.Movelist (.Dvalue .D)) ])]
% 6: возврат к другой альтернативе развилки;
    [fail]  ])]