Wiki内検索
最近更新したページ
最新コメント
マクロ by stunning seo guys
TAO by stunning seo guys
do by check it out
MenuBar1 by awesome things!
last by check it out
未分類リファレンス by awesome things!
prog by check it out
Arc by stunning seo guys
MenuBar1 by tips about seo
Daniel Weinreb by tips about seo
Menu
.
タグ

prog

形式

(prog (変数) 式もしくは、タグ)

動作

(prog (l)
      (setq l '(foo bar baz))
   L  (cond ((null l) (return)))
      (print l)
      (setq l (cdr l))
      (go L))
;=>
;(FOO BAR BAZ) 
;(BAR BAZ) 
;(BAZ) 

標準で含まれる処理系

  • Lisp 1.5
  • Maclisp
  • Zetalisp
  • Common Lisp
  • Interlisp
  • TAO

登場時期

1959年(Lisp 1.5)
順次実行、ループの処理の為に導入されたものとしては最も古く、現在の感覚からは意外であるが、Common Lispより古いLispでは、progの利用はかなり一般的だった様子である。
Common Lispでは、progがより一般化され、tagbody、block、letと各要素が別々に提供されることになった。
上記のコードは、Common Lispでは、
(block nil
  (let (l)
    (tagbody 
       (setq l '(foo bar baz))
     L (cond ((null l) (return)))
       (print l)
       (setq l (cdr l))
       (go L))))
と書くことができる。
この分割が現在ではprogを利用したコードが殆ど無くなったことの一因であるとCLtLには記載されている。

慣用句

  • リストをCDRダウン
(prog (l)
      (setq l '(foo bar baz))
   L  (cond ((null l) (return)))
      (print l)
      (setq l (cdr l))
      (go L))
;=>
;(FOO BAR BAZ) 
;(BAR BAZ) 
;(BAZ) 
上記の例は、最も古い慣用書式と思われ、古いコードでは、大体このように書かれている。
  1. 変数の初期化
  2. ループ脱出判定
  3. 処理
  4. 変数の変更
  5. タグへジャンプ
という流れになる。
変数の初期化は、Common Lisp/ZetaLispでは、letのような形式で
(prog ((l '(foo bar baz)))
   ...)
と書くことが可能である。
また、このことからprog*が派生することとなった。
2007年12月02日(日) 17:28:40 Modified by g000001




スマートフォン版で見る