JPH0573312A - リスト処理方式 - Google Patents

リスト処理方式

Info

Publication number
JPH0573312A
JPH0573312A JP23757491A JP23757491A JPH0573312A JP H0573312 A JPH0573312 A JP H0573312A JP 23757491 A JP23757491 A JP 23757491A JP 23757491 A JP23757491 A JP 23757491A JP H0573312 A JPH0573312 A JP H0573312A
Authority
JP
Japan
Prior art keywords
constant
processing
list
list structure
variable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP23757491A
Other languages
English (en)
Inventor
Kazunori Tomita
一則 冨田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
KOBE NIPPON DENKI SOFTWARE KK
NEC Software Kobe Ltd
Original Assignee
KOBE NIPPON DENKI SOFTWARE KK
NEC Software Kobe Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by KOBE NIPPON DENKI SOFTWARE KK, NEC Software Kobe Ltd filed Critical KOBE NIPPON DENKI SOFTWARE KK
Priority to JP23757491A priority Critical patent/JPH0573312A/ja
Publication of JPH0573312A publication Critical patent/JPH0573312A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 データ構造の構図から、それに対応するリス
ト構造を生成する処理プログラムを、倹約的で、効率的
なものにする。 【構成】 雛型となるデータ構造の構図のリストを、バ
ッククォート構文処理2が受け取ると、その要素を順に
定数か変数か判断いて、その結果に準じて、定数処理
3、あるいは変数処理4を呼び出して、与えられたデー
タ構図に対応するリスト構造を生成する処理プログラム
を作りだす。この時、定数処理3,変数処理4が動作中
に定数保存機構5が倹約的で、効率的な処理プログラム
にすることを促進する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、動的にリスト構造を構
築する処理プログラムの生成に関し、特に構築するリス
ト構造中に変数、および定数が混在する場合に、より倹
約的で、効率的なリスト構造を構築するための処理プロ
グラムを生成するリスト処理方式に関する。
【0002】
【従来の技術】リスト処理に適した言語であるLISP
においては、あるリスト構造を動的に作りだし、それを
処理プログラムと解して評価実行する(LISPのプロ
グラムもまたリスト構造をしているため実行可能であ
る)ことで、再度リスト構造を得ることがある。このメ
カニズムは、特に、LISP言語においてマクロを評価
する際に機能する。したがって、マクロの定義時には、
評価実行が二重に行われるため、最初に、動的に作りだ
したリスト構造を評価実行した結果、必要な目的とする
リスト構造が適切に得られるように、工夫しなければな
らない。
【0003】この工夫が容易になるように、一般にLI
SPはバッククォート構文と呼ばれるリスト処理機構を
用意している。バッククォート構文は、この「リストを
評価実行することで得られる結果のリスト構造」を、直
接的に雛型として、マクロの定義中に記述することを可
能にする。マクロをバッククォート構文で記述すれば、
評価実行の結果の形式を得ることができる処理プログラ
ムが、自動的に定義される。すなわち、バッククォート
構文は、マクロの定義中に記述されている評価実行の結
果の形式となる雛型のリスト構造(以下、雛型リスト構
造と呼ぶ)をもとに、それに対応するリスト構造を生成
するような処理プログラム(以下、リスト生成処理プロ
グラムと呼ぶ)をリスト(LISPプログラムとしても
解釈することができる)として組み立てる。
【0004】バッククォート構文が解析する雛型となる
リスト構造の要素には、定数だけでなく、変数も含まれ
ている(この時、定数には、定数的に取り扱える式も含
め、変数には変数と同様に評価実行してその値を求めて
よい式も含めて考える)。雛型リスト構造中の変数は、
リスト生成処理プログラムが評価実行されたときに、そ
の環境下での当の変数の値と置換されなければならな
い。逆に、定数は、たとえ評価実行されも、変数として
取り扱われないようにしなければならない。
【0005】この変数、定数の区別を従来のLISP言
語は、定数の方に定数マーカーを付けることで実現して
いる。したがって、雛型リスト構造に対するリスト生成
処理プログラムが評価実行されるときは、基本的に、リ
ストのすべての要素は評価されてその評価値へと置換さ
れる。ただし、定数に関しては、このマーカーによっ
て、評価されて、もともとの定数になり、その上で置換
される。
【0006】一方、雛型リスト構造中の定数の認識手順
は、要素として連続している定数があれば、一塊にまと
めて一定数として扱うようにしている。そして、この定
数が変数と混在することになった時点で、もし、一塊と
して扱えないとなれば、個々の要素に対して個別的に定
数マーカーをつけて、リスト生成処理プログラム中への
組み込んでいた。
【0007】
【発明が解決しようとする課題】定数であれば個々に定
数マーカーをつけて変数の区別することにすると、雛型
リスト構造中のすべての定数に対して、定数マーカーを
必要とし、そのマーカーのために主記憶が一つ消費され
てしまう。したがって、定数が多くなれば多くなるほど
主記憶は多く消費されるという問題点がある。および、
リスト生成処理プログラムの評価実行時には、これらの
定数マーカーを解釈して、定数とみなすため、実行に余
分な時間が費やされるという問題点もある。
【0008】さらに、上述したように、雛型リスト構造
からリスト生成処理プログラムを作りだすバッククォー
ト構文は、ほとんどが、マクロの定義に使用されてい
る。マクロはLISPプログラム実行時や、LISPプ
ログラムのコンパイル時に、その出現ごとに評価実行さ
れるもので、かなりの回数実行される。そして、マクロ
の実行が定数マーカーの解釈を含んでいるので、定数が
多くなればなるほど、LISPプログラムの実行やコン
パイルの時間が大きくなるという欠陥も存在する。
【0009】また、できる限り多くの要素を一塊にして
定数として取り扱っている場合も、もしこの定数と変数
が混在することになれば、最終的には一まとめにした要
素すべてに対して、やはり定数のマーカーを付けなけれ
ばならない時があり、上述の問題点は解決されないまま
である。
【0010】
【課題を解決するための手段】本発明は、構築したいデ
ータ構造の構図を示す雛型リスト構造から、そのデータ
構造の構図に対応するリスト構造を生み出すリスト生成
処理プログラムを動的に作り出すリスト処理方式におい
て、前記雛型リスト構造中の変数に変数処理を行わせ定
数に定数処理を行わせるバッククォート構文処理と、定
数処理の後にシステム既定の定数および自己評価式には
定数マーカーを付与せずその他の定数には定数マーカー
を付与する定数保存機構とを備えている。
【0011】
【実施例】本発明について、図面を参照して説明する。
【0012】図1に本発明の一実施例の基本構成を示
す。バッククォート構文処理2はインタプリタ1の環境
下で動作する。バッククォート構文処理は、大きく、雛
型リスト構造に対する定数処理3と変数処理4に分かれ
る。定数処理3、および変数処理4は定数保存機構5を
内包しており、定数保存機構5が機能することで、主記
憶の消費を抑制したリスト生成処理プログラムを作りだ
す。
【0013】図2に示すように、構築したいデータ構造
の構図を表現する雛型リスト構造6がインタプリタ1に
取り込まれると、それと連動して、インタプリタ1から
バッククォート構文処理2が呼び出される。バッククォ
ート構文処理2は、雛型リスト構造6を受け取り、その
リスト構造中の各要素に対して定数であるか変数である
かを判断しながら、それに準じて定数処理3と変数処理
4を随時呼び出して、リスト生成処理プログラム7を作
りだす。定数処理3および変数処理4が動作中に、定数
保存機構5が機能して、倹約的なリスト生成処理プログ
ラムを作りだすことを促進する。
【0014】バッククォート構文の処理に入ると、図3
に示すように、雛型リスト構造中の各要素が定数である
か変数であるかを、順に判定して解析を行っていく。も
し定数であれば、定数処理3に制御が移り、可能な限り
連続した定数を一塊にするため、定数処理3は、次の要
素が定数であるかを判断しにいく。次の要素が定数であ
れば、この処理を繰り返すため、定数処理3に戻る。定
数処理3が継続している間は、雛型リスト構造の解析処
理は、連続した要素を一塊の定数として生成する構造を
作っていく。最終的に、雛型リスト構造中に変数が存在
しなければ、一まとまりの一つの定数を生成するような
リスト生成処理プログラム7を作りだす。
【0015】一方、雛型リスト構造中の次の要素が、定
数でなく変数であった場合には、変数処理3に制御が移
り、それ以前までの定数部分が、現在処理中の変数に対
処できるように(すなわち、リスト生成処理プログラム
7を評価実行する時に、定数と変数の区別がつけられる
ように)、必要であれば、定数部分の各要素に定数マー
カーを付与しにいく。定数マーカーを付与するときに、
今度は、定数保存機構5が機能して、各要素が定数マー
カーなしでも定数と解釈されるかどうかを判断する。定
数マーカーなしでも定数と解釈できる要素に対しては、
マーカーを付与することを行わない。逆に、定数マーカ
ーがないと定数と解釈できないものにはマーカーを付け
加える。このマーカー付与の変換処理を行った後で、現
在解析中の変数と結合させてリスト生成処理プログラム
とする。そして、次の要素に処理が移る。雛型リスト構
造中の要素がなくなれば、その時点でのリスト生成処理
プログラム7が、解析結果として返却される。
【0016】定数保存機構5は、自己評価式も定数マー
カーの必要のない定数と認識する。LISP言語におい
ては、数あるいは文字列は自己評価式とされることが多
いが、インプリメントの方式によっては、文字,配列,
構造体などシンボル以外のすべてのオブジェクトを自己
評価式とすることもある。
【0017】図4に示すように、定数保存機構5に制御
が移ると(変数処理4と定数処理3のいずれからも呼び
出される)、まず最初に、渡されたリスト構造中の要素
が、システム既定の定数を表現するシンボル(これらは
変数と取り違えられることはない)であるかどうかを判
定する。LISP言語においては、nil(「偽」を表
す)やt(「真」を表す)などのLISPの実行に必須
の定数があり、さらに、処理系によれば、pi(円周
率),short−float−epsilon(自然
対数の底)など50を越えるプログラム開発を効率的に
するための定数が提供されていることがあり、さらに、
利用者が定数であると宣言したシンボルもあり、渡され
た要素が、これらのいずれかの定数シンボルであるかど
うかを判定する。もし、これらのいずれかであれば、定
数マーカー不要の定数であると認識し、定数保存機構
は、定数マーカーを付与せずに、要素そのものを返却し
終了する。
【0018】そうでなければ、次のステップに移り、こ
の要素が自己評価式であるかどうかを判定する。シンボ
ル以外のすべてを自己評価式とするのではなく、LIS
P処理系の提供するオブジェクトの一部だけを自己評価
式とする場合のことを考慮すると、定数保存機構は、渡
された要素が、自己評価式とされるオブジェクトのいず
れかであるかを、順々に、判定していく(シンボル以外
のすべてのオブジェクトを自己評価式とするLISP処
理系では、この判定は、「オブジェクトがシンボルでな
いか?」という条件判定だけで行える)。いずれかであ
れば、定数マーカー不要の定数であると認識し、やはり
要素そのものを返却する。
【0019】いずれでもなければ、定数マーカーがない
と変数と取り違えられてしまう要素なので、この要素に
定数マーカーを付与して返却し、終了する。
【0020】したがって、自己評価式やシステム既定の
定数を定数マーカー不要の定数と認識することで、雛型
リスト構造中シンボル以外の要素はすべて定数マーカー
不要の定数であると解釈できるようになり、定数マーカ
ーを付与する回数を減少させることができる。
【0021】一度、雛型リスト構造6中に変数が出現す
ると、それ以降は、バッククォート構文2に与えられた
雛型リスト構造6が、変数を含むリスト構造であるとし
て処理されていく。したがって、今度現れるリスト構造
中の要素が定数であっても、既に変数処理が行われた後
なので、リスト生成処理プログラ7に組み込むために
は、定数マーカーが必要になる。このときも、定数処理
3から定数保存機構5が呼び出され、機能して、必要で
ない定数マーカーは生成しないようにする。
【0022】
【発明の効果】以上説明したように、本発明は、データ
構図を示す雛型リスト構造の解析処理に、定数の保存機
構を強化することで、余分な主記憶の消費を抑制するこ
とができ、同時に、定数に付与された定数マーカーの解
釈処理回数が減少するため、リスト生成処理プログラム
の評価実行が高速になる。
【図面の簡単な説明】
【図1】本発明の一実施例の基本構成を表す図である。
【図2】図1に示す実施例の雛型リスト構造6の解析処
理を示す図である。
【図3】図1に示す変数処理3と定数処理4の関連を表
す図である。
【図4】図1に示す定数保存機構5の動作を示す図であ
る。
【符号の説明】
1 インタプリタ 2 バッククォート構文処理 3 定数処理 4 変数処理 5 定数保存機構 6 雛型リスト構造 7 リスト生成処理プログラム

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 構築したいデータ構造の構図を示す雛型
    リスト構造から、そのデータ構造の構図に対応するリス
    ト構造を生み出すリスト生成処理プログラムを動的に作
    り出すリスト処理方式において、前記雛型リスト構造中
    の変数に変数処理を行わせ定数に定数処理を行わせるバ
    ッククォート構文処理と、定数処理の後にシステム既定
    の定数および自己評価式には定数マーカーを付与せずそ
    の他の定数には定数マーカーを付与する定数保存機構と
    を含むことを特徴とするリスト処理方式。
JP23757491A 1991-09-18 1991-09-18 リスト処理方式 Pending JPH0573312A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP23757491A JPH0573312A (ja) 1991-09-18 1991-09-18 リスト処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP23757491A JPH0573312A (ja) 1991-09-18 1991-09-18 リスト処理方式

Publications (1)

Publication Number Publication Date
JPH0573312A true JPH0573312A (ja) 1993-03-26

Family

ID=17017336

Family Applications (1)

Application Number Title Priority Date Filing Date
JP23757491A Pending JPH0573312A (ja) 1991-09-18 1991-09-18 リスト処理方式

Country Status (1)

Country Link
JP (1) JPH0573312A (ja)

Similar Documents

Publication Publication Date Title
CN112114791B (zh) 一种基于元学习的代码自适应生成方法
Genesereth et al. An Overview of Meta-Level Architecture.
US5355494A (en) Compiler for performing incremental live variable analysis for data-parallel programs
JPH06103463B2 (ja) コード生成方法
CN113609806B (zh) 一种结合子图同构的量子线路程序通用变换方法
JP4346316B2 (ja) 複数の意味レベルによるアスペクト指向プログラミングのための方法
KR20010086159A (ko) 자바 프로그램들 및 이를 위한 소프트웨어 프러덕트의플랫폼 특정 효율 강화를 위한 방법
CN117313802A (zh) 神经网络模型转换方法、装置、设备及存储介质
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
Tesler et al. The LISP70 pattern matching system
Benzinger Automated complexity analysis of Nuprl extracted programs
EP3997593B1 (en) A streaming compiler for automatic adjoint differentiation
JP3318051B2 (ja) 翻訳処理方法
JPH0573312A (ja) リスト処理方式
JP2002527816A (ja) プログラム最適化装置および方法
JPH04205423A (ja) プログラム作成装置
US6772414B1 (en) Lifetime-sensitive mechanism and method for hoisting invariant computations out of loops in a computer program
Di Iorio et al. A Self-Applicable Partial Evaluator for ASM
JPH05120323A (ja) If文下ベクトル演算最適化方式
CN116679939A (zh) 一种plc指令转换为目标语言的方法、装置以及介质
CN118394344A (zh) 一种燃气轮机并行编译方法及装置
JPH02253443A (ja) プログラム生成方法
Kingdon et al. The GAME programming environment architecture
JPH052477A (ja) グラフイカル・ユーザ・インタフエースの作成方式
KR100289061B1 (ko) 시간순서화명세언어시뮬레이션도구를위한관리자시스템