do - make - made

Sergey ShishkinSergey Shishkin
2 min read

Чтобы “не тянуть кота за хвост” решил акцентировать все три “специфических интерпретатора“ в связке, как продолжение предыдущим run - exec - eval. Кстати, в rebol-подобных языках “do” больше в центре внимания, чем, например, тот же “eval“. Без списков зависимостей, посчитав, что это некоторая специальная задача и я её буду продолжать в фоновом режиме.

# (do 'flg|cnt ['any | (NIL 'any . prg) | (T 'any . prg) ..]) -> any
(de _Do (Exe)
   (let (X (cdr Exe)  Y (eval (++ X)))
      (cond
         ((nil? Y) Y)
         ((cnt? Y)
            (let N (int Y)
               (if (or (sign? Y) (=0 N))
                  $Nil
                  (loop
                     (let R (loop1 X)
                        (? (=0 (& R 1)) R)
                        (? (=0 (dec 'N)) (& R -2)) ) ) ) ) )
         (T (loop2 X)) ) ) )  # Non-NIL 'flg'

https://picolisp-manual.tiddlyhost.com/#do

# (make .. [(made 'lst ..)] .. [(link 'any ..)] ..) -> any
(de _Make (Exe)
   (let
      (Make (val $Make)
         Yoke (val $Yoke)
         R (link (push $Nil NIL)) )
      (set $Make (set $Yoke R))
      (exec (cdr Exe))
      (set $At2
         (if (pair (val R))
            (ofs (val $Make) -1)
            $Nil ) )
      (set $Make Make  $Yoke Yoke)
      (pop R) ) )

https://picolisp-manual.tiddlyhost.com/#make

# (made ['lst1 ['lst2]]) -> lst
(de _Made (Exe)
   (let X (cdr Exe)
      (unless (val $Make)
         (makeErr Exe) )
      (when (pair X)
         (if (atom (set (val $Yoke) (eval (++ X))))
            (set $Make (val $Yoke))
            (let Y (eval (car X))
               (when (atom Y)
                  (setq Y (val (val $Yoke)))
                  (while (pair (cdr Y))
                     (setq Y @) ) )
               (set $Make (ofs Y 1)) ) ) )
      (val (val $Yoke)) ) )

https://picolisp-manual.tiddlyhost.com/#made

Можно обратить внимание, что made и make “почти рекурсивны” или “частично рекурсивные“ … короче, призрак рекурсии в системе, похоже, сопровождает нас повсеместно. Согласитесь, что любопытно, как это выражается на “классических“ циклах и функциях “условных переходов”.

0
Subscribe to my newsletter

Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sergey Shishkin
Sergey Shishkin

Всегда чему-то учусь!