JPS584451A - 関数型情報処理装置 - Google Patents

関数型情報処理装置

Info

Publication number
JPS584451A
JPS584451A JP56102899A JP10289981A JPS584451A JP S584451 A JPS584451 A JP S584451A JP 56102899 A JP56102899 A JP 56102899A JP 10289981 A JP10289981 A JP 10289981A JP S584451 A JPS584451 A JP S584451A
Authority
JP
Japan
Prior art keywords
function
variable
value
list
called
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
JP56102899A
Other languages
English (en)
Inventor
Takeshi Shinoki
剛 篠木
Hiroshi Hayashi
弘 林
Akira Hattori
彰 服部
Akio Shinagawa
明雄 品川
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP56102899A priority Critical patent/JPS584451A/ja
Publication of JPS584451A publication Critical patent/JPS584451A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 本発明は、数値で社なく記号を処理するリス!(L%−
pすなわちLi5t Proesasor )のような
関数瀝言語用の関数型情報処理装置に係夛、とくに、記
号データ間のつなが夛を2進木リストとしてコンに#1
−タ内部の記憶回路にスタ、p構造的に格納するにあた
りて、そのスタックに格納され九変数の検索時間を短縮
するために上記スタックメモリの外部に最近呼ばれた関
数のスタック↓の実引数群の先頭アドレスを直接さすレ
ジスタを有することを特徴とする関数型情報処理装置に
関する。
すxfld第1図に示すような2進木リストす表わち記
号のりなか〕を閉路を含tfkい節点と枝の集合である
木構造(第1図(a))であられしえものを扱うもので
ある。すなわち、第111(a)0ような木構造であら
れされる記号のっ々が)を第1図(b)のように各ノー
ドからでる枝が2本づつである2進水表現に直した形で
第1図(e)に示されるよう壜主記憶装置に格納する。
すなわち、各リストセルは主記憶装置の11!または2
語からな)その各セルは左、右2つの部分からなる。各
七ルの左の部分は普通はある記号の表現、たとえばムと
いう文字の記号のビット−ターンが格納され、右の部分
はその記号とつながるべき、次の記号を格納しているセ
ルの番地を格納することによって2つセルが連結してい
ることを表現する。従って、第1図(、)のリストセル
のつながりは、第1図(b)の2進木リストを記憶回路
上で実現しているものである。
9スゲは、このようなリスト構造をリス!言語を実行す
ることによって、グロセ、すを使って動的に変換し、目
的のリスト構造を得る装置である。
リスプにおいてグログラムするということは、2進木リ
ストを変換するために必要な以下の5つの基本関数を組
み合せて形成される関数を定義し、その値を求めること
である。
5つの基本関数とは、 イ)ear(X〕カール 2進木リス)Xの左の枝の先にある2進木リストを値と
する。
口)  edr (X)クダー 2進木リス)Xの右の枝の先にある2進木リストを値と
する。
新しいリスト・セルを設け、その左の枝を2進水リス)
Xとし右の枝を2進木リストYとするような新九な2進
木リストを作ってそれを値とする。
二)  atom (X)アトム 、Xがアトムの時、真という値(”T”や1*T*”で
示めす)を取9、そうでないとき、偽(” NIL ’
というアトムで示す)とする。
ホ)会q(X:Y)イク XとYが同じ2進木リストの時、真の値(”?’−?”
*r*1)を取ル、そうでない時、偽の値(”NIL’
)を取る。
例えば、/ (x e y ) = xl + yxの
定義はf−λ〔〔X。
Y ) ; XY+YX、1と表わすことにょル、/(
2,3)  のmu、J ((X、Y) ;xY+y”
、l (213)−25+32  トなシ、変数の対応
関係を明確に規定することができる。
ここで、(X、Y)は仮引数と呼ばれる変数でありて(
2# 3)は(x、y)のそのときの値である実引数と
呼ばれるものである。そして、この実引数(2,3)を
仮引数(x、y)に代入することを束縛(blmdlm
g )すると呼び、実引数を仮引数に束縛することによ
りて関数の値、この場合2s+ 3”という目的のリス
トをつくることがリスプを実行することである。したが
って、リスプすなわち関数型情報処理装置にあっては、
仮引数と実引数をどのように束縛するかが問題となる。
本発明においては、変数の束縛値(111m4 Vat
s・)が線形リスト(ll境リスト)すなわちFILO
(Flrst I!I La5t Oat tたはPw
ahdevn P(IPIIP )型スタ、りへ変数名
と値の対で格納される。ここでFILO型スタ、りとは
前記記憶回路上で2進木リスト構造でデータを間接アド
レス方式(すなわち、あるセルに次につながるセルのア
ドレスを格納しておく方式)で格納していくことである
。この変数名と値との対を格納していく順序は、引数変
数の関数が呼ばれたときに実引数を値とする順番になる
、いわゆる〆イナき、クスコービング(Dynamle
 ge・pll)型の環境をもつ関数型言語であって、
その変数の値がなにであるかを参照する手順は、基本的
には上記環境リスト(又はスタ。
り)を先頭からシーケンシャルに検索して最初に見つか
った値を使う、いわゆるディーグバインド(D・すBt
na)型変数束縛を行なう場合に、局所変数(関数の引
数等の束縛値が決定されている変数、すなわち、まだ実
引継が束縛されている変数)を捜し出すアクセスタイム
を短縮するために主記憶装置の外7部に最近呼び出され
た関数のスタック上の実引数群の先頭アドレスを直接さ
すレジスタを設けることが本発明の特徴である。
一般に、第2図に示すように関数型とは、そのグログラ
ム構造や実行形態が呼ぶべき関数すなわチ実行スルへき
関数/−λ[’(xty):x”+y”)の仮引数(x
、y)へ実引数(2,3)を結合、すなわち束縛(バイ
ンド)シ、呼ばれ九(起動された)関数は、渡されたす
なわち代入されるべき実引数中大域変数を参照して所定
の手続きを実行し、その関数の値2’ + 32を呼び
側へ返し、それ以外の副作用(環境を変更すること)は
ないものを言う、副作用については、本発明の要旨から
みて、説明を省略する。
関数管呼び出す(Call)場合、その仮引数への実引
数の束縛の方法には、ディープ/4インド法とシャロー
バインド(8hallov Bind )法がある。
ディーグt4イ/ド法は前述したように、束縛された変
数名(x、y)と値(2,3)の対(−47、すなわち
、Xは2、Yは3の対)を線型リストやスタック構造に
格納し、変数値を参照する場合には、最後に束縛され虎
方向からシーケンシャルにたどり、最初に発見したその
変数の値を使うという環境の構成である。
すなわち、ディーンパインげ法は、第3図(畠)に示す
ように、主記憶装置の記憶単位である語の構成が左、右
2つの部分に分かれ、1つのセルになっていて、左部に
変数名を格納し、右部はそのセルが接続する次のセルの
アドレスを格納することによって次のセルのその変数の
値を知ることができ、沢山の変数がある場合は、第3図
(1)のように連結し、等測的に第3図(b)のような
FILO型のスタ、りを構成するものである。
関数コール(Call)の時に、引数変数に値をバイン
ドするときには、環境リス)(または環境スタ、り)の
検索出発点の方向から、その名前と値の対をつなげ、検
索出発点ポインタを新九に付加した項目の先頭へ更新す
る。すなわち、第3図(a)の主記憶装置上では、先頭
に1つのセルn+1を設けることに対応し、そのセルが
つながる次のセルが1であることに対応する。これは、
第3図(b)において社、スタックの!、シ& (1’
wsh )動作へ七対応し、その変数名が「1であって
、その値が(m+1)であるセルをスタ、fの最下段に
!。
シ、して入れるととく対応する。関数のリターン(R@
turn )時には、その関数がコールされたときの状
態に検索出発点−インタを戻す、すなわち、第3図(a
)の主記憶回路上では、先頭のセルn+1   ′を1
つとって、セルnを先頭にすることに対応し、#!3図
(b)では、n+1とその値(m+1 )をボッ!動作
δτ外に出すことを意味する。ディープ・々インド法の
長所は、スタ、りの!、シ、 4!、f動作が簡単であ
るので関数コール時の引数変数のバインド処理、関数リ
ターン時の引数変数のアン/fインI−″(υabin
d )処理のオー・量−へ、ドが比較的少ないことであ
り、短所は、大域変数(自由変数とも呼ぶ)のように、
かなシ以前に/4インドされた変数すなわちスタックの
奥の方にある変数の参照に時間がかかることである。
シャローバインド法は、各変数毎に、その値な保持する
ランダムアクセス域(ValtI@C@If ト呼))
を設け、関数コール時には引数変数のパリ、−セルへそ
の実引数を格納し、Δす、−セルに以前から存在した値
を、線形リス)(またはスタ、り)へ名前と出値の対と
して格納し、変数参照は対応するノ奇り、−セルを読む
だけでよく、関数リターン時には、その引数変数のパリ
、−セルへ線形リスト(またはスタック)へ格納してあ
一5九旧値を戻す、シャローバインド法の長所は、変数
参照時間が短かいことであル、短所は関数ゴール時の引
数変数のバインド処理、関数のリターン時のアン/4イ
ンド処理のオーツ々−ヘッドが大きいことである。
本発明の目的は、上述したような関数型情報処理装置に
おいて、データ間のつなが〕を表わすリストをディープ
/臂インド方式に従ってスタックメモリ内に格納される
変数を参照するアクセスタイムを短縮するために主記憶
装置の外部に最近呼び出された関数のスタック上の実引
数群の先頭アドレス管直接指すレジスタを設は環境リス
ト上の17レーム(1関数)内の変数参照の高速化を図
ることを%黴とする関数型情報処理装置を提供すること
にある。
本発明の特徴とするところは、!ログラムの構造及び実
行形態が仮引数としての変数名と実引数としての変数値
の対として環境リストであるFirst −In −L
a5t −Oat @のスタックメモリへ格納すること
によって、呼ぶべき関数の仮引数変数へ実引数を束縛し
、呼ばれた関数は変数の値を参照する場合、上記環境リ
ストの最近の束縛値を使って処理を行い、その関数の値
が得られれば、関数の仮引数変数を上記環境リストから
削除して上記関数値をリターンするという一連の処理を
繰返す関数型情報処理装置において、最近呼ばれ九関数
のスタ、り上の実引数群の先頭アドレスを直接さすレノ
スタを有する関数型情報処理装置を提供することである
以下、図面を参照して本発明の一実施例を説明する。
まず、スタック上のディー!・母インド方式では次のよ
うな処理が行なわれる。関数呼び出しが起こる手前で実
引数がそろうとスタ、りは第4図(a)のようになる、
ここでSTPはスタ、クト、f−インタである。関数が
呼び出されると呼び出された関数側で第4図(b)のよ
うな形になる0以上のような処理によって第4図(11
)のようにスタック中の関数毎の情報間は、旧FPによ
ってリンクされる。
ここでFPは7レーム?インクすなわち現在実行してい
る関数の制御情報の先g4を指すものである。
このリンクによって変数の参照があったときそれtたど
って変数名をサーチすることによってそのたとえば Fl(Z)−Z’+F2(10) F2(x)=x2+x+F3(γ) F3(x)−x’+1+Z という関係にある3つの関数において、Fl(3)の値
を求める場合を説明する。関数Fl(Z)をコールする
時点で仮引数2は3に束縛されて、環境リスト上にその
束縛関係が格納される。しかし、Fl(Z)の計算には
関数72(x)の値F2(10)が必要であるので、関
数F2(x)をコールする。このコール時において仮引
数Xは1oに束縛されて環境リスト上にその束縛関係が
格納される。しかし、また、F2(10)の計算には関
数F3(x)の値F3(7)が必要であるので、関数F
3(x)をコールする。このコール時において、仮引数
x #′i、7に束縛されて環境リスト上にその束縛関
係が格納される。しかし、F3(X)の@1F3())
t−求めるのにF 3 (X)m!’+l + Zの2
は大域変数、すなわち、その時点で束縛されない変数で
あるが、2はFl(Z)をコールする時点でZ−3に束
縛されているので、環境リスト上をさかのぼって2が3
であることをサーチするわけである。そしてはじめてF
 3(7)、75+1+3が求t、a、F2(x)にリ
ターンしてF 2 (1G)−10’+10413(7
)が求t、a、Fl(Z)Kリターンして、Fl(3)
−32+F2(10)となシ、Fl(3)という値が求
まるのである。
第5図の環境リス)において、関数F1はF2を、F2
社F3管、F3はF4を、F4はF5を、そしてF5は
F6をコールするようになっているとする。このとき関
数26を F6(N)−N2+x+Z+Z2 であると仮定する。すなわち、Nは局所変数で、Iと2
は大域変数である。大域変数であるXは関数F 2 (
x e y )をコールする時点でz m 5であるよ
うに束縛されておル、zは関数F3(Z)をコールする
時点でZ−8であるように束縛されている。F6(N)
の値を計算するために、NとXそして2の各変数を参照
するため、まず環境リスト上をサーチするが、局所変数
Nに対しては即座にその値(例えばN−10)をみつけ
ることができるが、x(”Zは最初は環境リスト上をさ
かの埋ってサーチする必要があり、X tz 5 、z
−gであることがわかる。
本発明に従って環境リスト上の1フレーム内(l関数)
内の変数参照を行なうためグロダラムをコン/ヤイルし
て実行する方式をとったときには、変数の参照があった
とき、その変数の定義が参照と同じ関数であれば、サー
チは必要でなくせる。
つt)、コン/臂イル時には、仮引数をみたとき、引数
基と何番目の引数であるか(変数番号)を記憶しておき
、変数の参照をみたとき、そのオブジェクトコードとし
てFPからのインデックシングで変数の値を得るような
コードが出せる。つまシ、オブジェクトコードとして FP−1−(FP−10中味〕寧2+ 変数番号を実行
するコードを出せば、逐次的サーチの必要はない。しか
し、仮引数の参照は、頻繁に行なわれるので、これだけ
ではまだ不満足である。
そこで、本発明は、第6図に示すように実引数群の先頭
を指す、特別の4インタすなわちアーゼ1メント4イン
クAP用のレジスタを設ける。ここでAP四FP−1−
(FP−1の中味〕*2として、関数呼び出しが起った
ときAPに実引数群の先頭を指させておけば変数の参照
があったときにはAP+変数番号 によって、前記AP用レしスタの内容でスタ、りをラン
ダムアクセスすれば変数は高速に参照することができる
このように、本発明は最近呼び出された関数やスタック
上の実引数群の先頭アドレスを直接さすレジスタを備え
る関数型情報処理装置を提供するもので、このレジスタ
を設けることによって17レーム内の変数参照が高速に
行うことができるという効果を奏するものである。
【図面の簡単な説明】
第1図(a) 、(b) + (e)は2進木リストを
説明する図、第2図は関数型情報処理を説明する図、第
3図(a)。 (b)はディープバインド法を説明する図、第4図(1
)l(b) 、 (6)はスタック上のディープ・ヤイ
ンド法を説明する図、第5図はディープバインド法を具
体的に説明する図、第6図は本発明の一実施例をスタッ
ク上に示めす図である。 STP・・・スタックド、7’deインタ、F P ・
・・フレームfインタ、AP・・・アーゼ、メントIイ
ンタ、′−yr4図

Claims (1)

    【特許請求の範囲】
  1. 1、  fロダラムの構造及び実行形態が仮引数として
    の変数名と実引数としての変数値の対として環境リスト
    であるFlrst −In −La5t −Out 1
    1のスタックメ篭りへ格納することによって呼ぶべき関
    数の仮引数変数へ実引数を束縛し、呼ばれた関数は変数
    の値を参照する場合、前記環境リストの最近の束縛値を
    使って処理を行い、その関数の値が得られれ瞳関数の仮
    引数変数を前記環境リストから削除して前記関数値をリ
    ターンするという一連の処理を繰返す関数型情報処理装
    置において、最近呼ばれた関数のスタ、り上の実引数群
    の先頭アドレスを直接さすレジスタを有することを特徴
    とする関数型情報処理装置。
JP56102899A 1981-06-30 1981-06-30 関数型情報処理装置 Pending JPS584451A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP56102899A JPS584451A (ja) 1981-06-30 1981-06-30 関数型情報処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP56102899A JPS584451A (ja) 1981-06-30 1981-06-30 関数型情報処理装置

Publications (1)

Publication Number Publication Date
JPS584451A true JPS584451A (ja) 1983-01-11

Family

ID=14339699

Family Applications (1)

Application Number Title Priority Date Filing Date
JP56102899A Pending JPS584451A (ja) 1981-06-30 1981-06-30 関数型情報処理装置

Country Status (1)

Country Link
JP (1) JPS584451A (ja)

Similar Documents

Publication Publication Date Title
US5721924A (en) Method and device for obtaining a value of a referred to variable defined in a source program having a specific variable name
US6198813B1 (en) System and method for providing call processing services using call independent building blocks
JPS584451A (ja) 関数型情報処理装置
CN111381827A (zh) 生成代码文件的语法树的方法、装置及电子设备
CN111381814A (zh) 生成代码文件的语法树的方法、装置及电子设备
JPH0126092B2 (ja)
JPS63201833A (ja) 未解決ラベル参照解決方式
JP3240647B2 (ja) コンピュータ言語の構造化処理方式
JPS63311439A (ja) コ−ル・リタ−ン方式
JPS6155736A (ja) プロロ−グマシン
JPH05143356A (ja) コンパイラ装置
JPS585851A (ja) 関数型情報処理装置
Barta PACOL: A parallel control language
JPS62163146A (ja) 計算機言語の変換処理方式
RU95118821A (ru) Способ преобразования входного кода транслятора в объектный код и устройство для его осуществления
JPH03177930A (ja) コンパイルコード生成処理方法
KR930002932A (ko) 시스템 프로그램 실행방법
JPH07141195A (ja) コンパイラにおけるリテラル最適化方式
JPS61115138A (ja) プログラム内のリスト形式のデ−タ構造のコピ−方法
JPS62137641A (ja) 高級言語のコンパイラ
JPS5846404A (ja) Crtデイスプレイ・ロ−ダにおけるリレ−ラダ−の折り返し表示方式
JPH01161543A (ja) 高級言語におけるエラー発生行番号探索方式
JPH01205331A (ja) 大規模プログラムリンク方式
JPH04115328A (ja) 関数処理方式
JPS585852A (ja) 関数型情報処理装置