プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2014/11/10 14:42 UTC 版)
(例) 2 以上 69 以下の指定した整数の階乗を計算するプログラムの例を示す。 行 コード コメント000-001 LBL A ラベルA(LBL A)を設置する。002-003 STO 01 メモリ01にストアする。004 1 1を置数する。005-006 LBL B ラベルB(LBL B)を設置する。007 * 乗算を行う。008-009 RCL 01 メモリ01をリコールする。010-012 DSZ 01 B メモリ01から1を減じ、その結果がゼロならば次のステップ(013)へ進む。 そうでなければラベルB(005)へ進む。013 = 最後の乗算を計算し確定させる。014 RTN プログラムを終了し、結果を表示する。 このプログラムを実行するには、 RST 6 R/S 又は 6 A のようにキー入力する。プログラムが終了すると計算結果が 720 のように表示される。
※この「プログラム例」の解説は、「TI-66」の解説の一部です。
「プログラム例」を含む「TI-66」の記事については、「TI-66」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/06/07 20:45 UTC 版)
以下の例は、プログラム自体としてはMLと比べ特別なものでもないし、オブジェクト指向を活用したものでもないが、OCaml を含む Caml では旧来のMLや Standard ML からの記法や演算子や名前の変更が多く、簡単なプログラムでもそのままではエラーになるものが多いので、ここでは OCaml のコードを示す。 特徴として、型推論の活用により、多くの場合に型の宣言が必要なく、一部の静的型付き言語にありがちな煩雑さがないことが挙げられる。
※この「プログラム例」の解説は、「OCaml」の解説の一部です。
「プログラム例」を含む「OCaml」の記事については、「OCaml」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/10/16 14:02 UTC 版)
1983年版のPARLOGと1986年に改良されたPARLOGとでは、言語の特性や細かいシンタックスがそれぞれ異なる。1983年版PARLOGのプログラムの例を以下に示す。append(x, y, z)は x と y の2つのリストを連結したリストが z であるという関係を表している。Prologと異なり、英小文字で始まる項が変数を表す。relationはモード宣言を示し、複数の組み合わせを指定できる。 relation append(?,?,^)relation append(?,^,?)relation append(?,?,?)append([], y, y).append([u|x], z, [u|z]) :- append(x, y, z) 1986年版では複雑だった言語仕様を整理し、より効率的な実行が可能になった。1986年版PARLOGのプログラムの例を以下に示す。Prolog同様、英大文字で始まる項が変数を表す。merge(Xs?,Ys?,Zs^)はXsとYsの2本のストリームをマージして1本のストリームZsにする。modeはモード宣言を示し1述語に1つのみ指定できる。 mode merge(Xs?,Ys?,Zs^).merge([A|Xs],Ys,[A|Zs]) <- merge(Xs,Ys,Zs).merge(Xs,[A|Ys],[A|Zs]) <- merge(Xs,Ys,Zs).merge([],Ys,Ys).merge(Xs,[],Xs). PARLOGによるプロセス間の同期の機能は、kernel PARLOGというモード宣言を持たない単純な標準形式に変換することで実現された。PARLOGでモード宣言が果たしていた役割は、特殊な単方向のユニフィケーションを入力側はガード部に、出力側はボディ部に付加することで実現され、ガード部で中断が行われる。例えば、上記プログラムの最初の節はkernel PARLOGで以下の形式に変換された。 merge(X,Ys,Z)<- [A|Xs] <= X : Z = [A|Zs] ,merge(Xs,Ys,Zs). <= は一方向のユニフィケーションを表し、Xが[A|Xs]のようなリストの形になっていない場合は中断し、他のプロセスにより[A|Xs]の形に具体化された場合に実行を再開する。この時点でXs自体は具体化されていなくてもかまわないため、リストの先頭からインクリメンタルに具体化されるストリームを素直に処理できる。
※この「プログラム例」の解説は、「PARLOG」の解説の一部です。
「プログラム例」を含む「PARLOG」の記事については、「PARLOG」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/01 11:29 UTC 版)
「なでしこ (プログラミング言語)」の記事における「プログラム例」の解説
母艦(メインフォーム)に'Welcome to Nadesiko.'と表示されるプログラム 「Welcome to Nadesiko.」と表示。 ダイアログに'Hello Nadesiko.'と表示されるプログラム 「Hello Nadesiko.」と言う。 メモ帳を起動するプログラム 「notepad.exe」を起動。 なでしこ3でアプリを起動する場合は、別途なでしこ3配布キットが必要になる。
※この「プログラム例」の解説は、「なでしこ (プログラミング言語)」の解説の一部です。
「プログラム例」を含む「なでしこ (プログラミング言語)」の記事については、「なでしこ (プログラミング言語)」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/12 22:09 UTC 版)
「Concurrent Prolog」の記事における「プログラム例」の解説
以下にConcurrent Prologのプログラム例を示す。
※この「プログラム例」の解説は、「Concurrent Prolog」の解説の一部です。
「プログラム例」を含む「Concurrent Prolog」の記事については、「Concurrent Prolog」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/09 09:58 UTC 版)
以下にいくつかのLISP (特にCommon Lisp) のコード例を示す。これらは産業界における典型的なコードではないが、コンピュータサイエンスのコースで通常教えられる典型的なLISPコードである。 LISPの構文はそれ自身が再帰的定義に自然に適合している。それゆえ、再帰的に定義された集合を列挙するというような数学の問題をシンプルに表現できる。 以下の関数は引数の階乗に評価される。 (defun factorial (n) (if (<= n 1) 1 (* n (factorial (- n 1))))) 下記は別のやり方であり、末尾再帰になっている。 (defun factorial (n &optional (acc 1)) (if (<= n 1) acc (factorial (- n 1) (* acc n)))) 再帰と対照的な概念である反復による計算の例として、Common Lispの代表的な繰り返し構文であるloopマクロを使った例を示す。 (defun factorial (n) (loop for i from 1 to n for fac = 1 then (* fac i) finally (return fac))) loopはマクロであり、これが展開されて最終的にはプリミティブな構文の組み合わせに翻訳される。 以下の関数は引数にリストをとり、そのリストの要素の順番を逆にしたものに評価される(LISPは実際には同じことを行うビルトイン関数を普通持っている)。 (defun reverse (l &optional acc) (if (atom l) acc (reverse (cdr l) (cons (car l) acc))))
※この「プログラム例」の解説は、「LISP」の解説の一部です。
「プログラム例」を含む「LISP」の記事については、「LISP」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/04/19 04:48 UTC 版)
「Windows Template Library」の記事における「プログラム例」の解説
Hello worldを表示するプログラムである。 #include
※この「プログラム例」の解説は、「Windows Template Library」の解説の一部です。
「プログラム例」を含む「Windows Template Library」の記事については、「Windows Template Library」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/26 07:06 UTC 版)
マーティン・リチャーズがリリースしているBCPLの最新版(2018年12月現在)であるCintsysで以下のプログラムを動かすには、エラーを回避するためLIBHDR、START、WRITEFを小文字にすること。 階乗の出力: GET "LIBHDR"LET START() = VALOF $(FOR I = 1 TO 5 DOWRITEF("%N! = %I4*N", I, FACT(I))RESULTIS 0$)AND FACT(N) = N = 0 -> 1, N * FACT(N - 1) n-クイーンパズルを解く: GET "LIBHDR"GLOBAL $(COUNT: 200ALL: 201$)LET TRY(LD, ROW, RD) BETEST ROW = ALL THENCOUNT := COUNT + 1ELSE $(LET POSS = ALL & ~(LD | ROW | RD)UNTIL POSS = 0 DO $(LET P = POSS & -POSSPOSS := POSS - PTRY(LD + P << 1, ROW + P, RD + P>> 1)$)$)LET START() = VALOF $(ALL := 1FOR I = 1 TO 12 DO $(COUNT := 0TRY(0, 0, 0)WRITEF("%I2-QUEENS PROBLEM HAS %I5 SOLUTIONS*N", I, COUNT)ALL := 2 * ALL + 1$)RESULTIS 0$)
※この「プログラム例」の解説は、「BCPL」の解説の一部です。
「プログラム例」を含む「BCPL」の記事については、「BCPL」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/26 07:52 UTC 版)
「Constraint Handling Rules」の記事における「プログラム例」の解説
CHRのプログラム例を示す。
※この「プログラム例」の解説は、「Constraint Handling Rules」の解説の一部です。
「プログラム例」を含む「Constraint Handling Rules」の記事については、「Constraint Handling Rules」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/26 09:42 UTC 版)
与えられたリストのクイックソートを行うプログラム例を示す。part/4はリストをピボットより大きい数のリストと小さい数のリストの2つに分割する。二分割された各々のデータはそれぞれqsort/3でソートされる。 :- module quicksort.qsort([Pivot|Xs], Ys0, Ys2) :- part(Xs,Pivot, Small, Large), qsort(Small, Ys0, [Pivot|Ys1]), qsort(Large, Ys1, Ys2).qsort([], Ys0, Ys1) :- Ys0 = Ys1.part([X|Xs],Pivot,Small,Large) :- Pivot< X | Large=[X|L1], part(Xs,Pivot,Small,L1).part([X|Xs],Pivot,Small,Large) :- Pivot>=X | Small=[X|S1], part(Xs,Pivot,S1,Large).part([], _, Small,Large) :- Small=[], Large=[]. qsort/3を呼び出すことで順次part/4とqsort/3とのプロセスネットワークが作られ、それらの間で並行処理が行われる。
※この「プログラム例」の解説は、「KL1」の解説の一部です。
「プログラム例」を含む「KL1」の記事については、「KL1」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/01 09:24 UTC 版)
Pythonによる素数判定(試し割り)のプログラム例を示す。 import mathdef is_prime(n): if n <= 1: return False if n== 2: return True if n % 2== 0: return False for i in range(3, math.ceil(math.sqrt(n)) + 1, 2): if n % i== 0: return False return True この例は入力nが素数である場合はTrueを返し、それ以外の場合はFalseを返す。 Pythonによる素数判定(エラトステネスの篩)のプログラム例を示す。 import mathdef eratosthenes(n): list_prime=list(range(2, n)) for i in range(2, n): if i in list_prime: for j in range(i * 2, n, i): if j in list_prime: list_prime.remove(j) if i> int(math.sqrt(n)): break return list_prime この例は入力nまでの素数のリストを返す。
※この「プログラム例」の解説は、「素数判定」の解説の一部です。
「プログラム例」を含む「素数判定」の記事については、「素数判定」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/06/03 10:22 UTC 版)
「HP-28 シリーズ」の記事における「プログラム例」の解説
(例) 0 以上 253 以下の指定した整数の階乗を計算するプログラムの例を示す。 << → N << 1 1 N FOR I I * NEXT>> >> 解説01: << : プログラム開始(BEGIN)02: → N : Nをローカル変数として定義する。 スタックから一つ取り出す。(スタックは一段下降) 取り出した値をNに代入する。03: << : プログラム開始(BEGIN) --- ローカル変数の適用範囲(スコープ)の開始位置を示す。04: 1 : スタックに1を置数する。(スタックは一段上昇) --- 計算結果の初期値05: 1 : スタックに1を置数する。(スタックは一段上昇) --- ループ変数Iの開始値06: N : スタックにNの値を置数する。(スタックは一段上昇) --- ループ変数Iの終了値07: FOR I : Iをループ変数とする。 スタックから二つ取り出す。(スタックは二段下降) 取り出した値をループ変数Iの開始値と終了値とする。 NEXTまでを繰り返す。08: I : スタックにループ変数Iの値を置数する。(スタックは一段上昇)09: * : スタックから二つ取り出す。(スタックは二段下降) 取り出した値の積を計算し、その値をスタックに置数する。(スタックは一段上昇)10: NEXT : ループ変数Iを1増加する。 ループ変数Iの値が終了値N未満ならばFORの直後の命令(08:)に戻る。 ループ変数Iの値が終了値N以上ならば、次の命令(11:)へ進む。11:>> : プログラム終了(END) --- ローカル変数の適用範囲(スコープ)の終了位置を示す。12: >> : プログラム終了(END) このプログラムを実行するには、例えば、 << → N << 1 1 N FOR I I * NEXT>> >> ENTER 'FACT' STO として、入力したプログラムを変数(ここではFACT)に格納しておく。その後、 6 FACT 等とすると、プログラムが実行され、 720 のように実行結果が第一スタックに表示される。
※この「プログラム例」の解説は、「HP-28 シリーズ」の解説の一部です。
「プログラム例」を含む「HP-28 シリーズ」の記事については、「HP-28 シリーズ」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/18 17:13 UTC 版)
「GNU Scientific Library」の記事における「プログラム例」の解説
ベッセル関数の値を計算する C プログラムの例を以下に示す。 #include
※この「プログラム例」の解説は、「GNU Scientific Library」の解説の一部です。
「プログラム例」を含む「GNU Scientific Library」の記事については、「GNU Scientific Library」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/15 00:00 UTC 版)
特に断りがない場合naとnbの大きい方をncに代入という意味である。
※この「プログラム例」の解説は、「if文」の解説の一部です。
「プログラム例」を含む「if文」の記事については、「if文」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/16 08:35 UTC 版)
「Elektronika MK-61」の記事における「プログラム例」の解説
2 以上 69 以下の指定した整数の階乗を計算するプログラムの例を示す。 プログラムアドレスキー入力命令コード説明スタック00 「X→П」「0」 40 スタックXの値をRG0にストア - 01 「1」 01 1を置数 上昇 02 「П→X」「0」 60 RG0の値をリコール 上昇 03 「×」 12 乗算 下降 04 「F」「L0」 5Г RG0の値が 2<=RG0 ならば、RG0をデクリメントし、命令の2バイト目で指定されたアドレス(ここでは02)へジャンプする。RG0の値が 1<=RG0<2 の範囲ならば次の命令のアドレス(ここでは06)へ進む。 - 05 「0」「2」 02 06 「С/П」 50 停止 - 「ПРГ」でプログラム編集モードに入り、上記プログラムを入力する。「АВТ」で実行モードに戻り、計算したい数値を、例えば、 6 などと入力し、「В/0」で先頭アドレス00へ移動し、「С/П」でプログラムを実行すると、暫くして、結果が、 720 のように表示される。
※この「プログラム例」の解説は、「Elektronika MK-61」の解説の一部です。
「プログラム例」を含む「Elektronika MK-61」の記事については、「Elektronika MK-61」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/01/03 00:34 UTC 版)
「HP-10Cシリーズ」の記事における「プログラム例」の解説
2 以上 69 以下の指定した整数の階乗を計算するプログラムの例を示す。 10C行 キー 表示 コメント01: 1 : 1 : スタックXに1を置数(DIGIT ENTRY) (スタックは上昇)02: STO 0 : 44 0 : スタックXをレジスタ0に入れる(STORE)03: R↓ : 33 : スタックYをスタックXに下降(ROLL DOWN)04: STO* 0 : 44,20, 0 : スタックXにレジスタ0を乗算してレジスタ0に入れる(STORE*)05: 1 : 1 : スタックXに1を置数(DIGIT ENTRY) (置数前のスタックXはスタックYに上昇)06: - : 30 : スタックYからスタックXを減算してスタックXに入れる (スタックは下降)07: x=0 : 42 20 : スタックXがゼロならば次の行へ行き、ゼロでなければ次の行をスキップする08: GTO 10 : 22 10 : 行10へ行く(GO TO)09: GTO 04 : 22 04 : 行04へ行く(GO TO)10: RCL 0 : 45 0 : レジスタ0からスタックXに入れる(RECALL) (スタックは上昇)11: R/S : 31 : プログラムを停止し、スタックXを表示する 11C行 キー 表示 コメント001: STO I : 44 25 : スタックXをレジスタI(インデックスレジスタ)に入れる(STORE)002: 1 : 1 : スタックXに1を置数(DIGIT ENTRY) (スタックは上昇)003: LBL 0 : 42,21, 0 : ラベル0を設置(LABEL)004: RCL I : 45 25 : レジスタIからスタックXに入れる(RECALL) (リコール前のスタックXはスタックYに上昇)005: * : 20 : スタックYにスタックXを乗算してスタックXに入れる (スタックは下降)006: DSE : 42 5 : レジスタIから1を減じ、 その結果レジスタIがゼロ以下ならば次の行をスキップする007: GTO 0 : 22 0 : ラベル0へ行く(GO TO)008: R/S : 31 : プログラムを停止し、スタックXを表示する 12C行 キー 表示 コメント01: 1 : 1 : スタックXに1を置数(DIGIT ENTRY) (置数前のスタックXはスタックYに上昇)02: STO 0 : 44 0 : スタックXをレジスタ0に入れる(STORE)03: R↓ : 33 : スタックYをスタックXに下降(ROLL DOWN)04: STO* 0 : 44,20, 0 : スタックXにレジスタ0を乗算してレジスタ0に入れる(STORE*)05: 1 : 1 : スタックXに1を置数(DIGIT ENTRY) (置数前のスタックXはスタックYに上昇)06: - : 30 : スタックYからスタックXを減算してスタックXに入れる (スタックは下降)07: x=0 : 43 35 : スタックXがゼロならば次の行へ行き、ゼロでなければ次の行をスキップする08: GTO 10 : 43,33,10 : 行10へ行く(GO TO)09: GTO 04 : 43,33,04 : 行04へ行く(GO TO)10: RCL 0 : 45 0 : レジスタ0からスタックXに入れる(RECALL) (スタックは上昇)11: R/S : 31 : プログラムを停止し、スタックXを表示する 12C Platinum (RPNモード)行 キー 表示 コメント001: 1 : 1 : スタックXに1を置数(DIGIT ENTRY) (置数前のスタックXはスタックYに上昇)002: STO 0 : 44 0 : スタックXをレジスタ0に入れる(STORE)003: R↓ : 33 : スタックYをスタックXに下降(ROLL DOWN)004: STO* 0 : 44 20 0 : スタックXにレジスタ0を乗算してレジスタ0に入れる(STORE*)005: 1 : 1 : スタックXに1を置数(DIGIT ENTRY) (置数前のスタックXはスタックYに上昇)006: - : 30 : スタックYからスタックXを減算してスタックXに入れる (スタックは下降)007: x=0 : 43 35 : スタックXがゼロならば次の行へ行き、ゼロでなければ次の行をスキップする008: GTO 010 : 43,33,010 : 行010へ行く(GO TO)009: GTO 004 : 43,33,004 : 行004へ行く(GO TO)010: RCL 0 : 45 0 : レジスタ0からスタックXに入れる(RECALL) (スタックは上昇)011: R/S : 31 : プログラムを停止し、スタックXを表示する 15C行 キー 表示 コメント001: STO 0 : 44 0 : スタックXをレジスタ0に入れる(STORE)002: 1 : 1 : スタックXに1を置数(DIGIT ENTRY) (スタックは上昇)003: LBL 1 : 42,21, 1 : ラベルを設置(LABEL)004: RCL 0 : 45 0 : レジスタ0からスタックXに入れる(RECALL) (リコール前のスタックXはスタックYに上昇)005: * : 20 : スタックYにスタックXを乗算してスタックXに入れる (スタックは下降)006: DSE 0 : 42, 5, 0 : レジスタ0から1を減じ、 その結果レジスタ0がゼロ以下ならば次の行をスキップする007: GTO 1 : 22 1 : ラベル1へ行く(GO TO)008: R/S : 31 : プログラムを停止し、スタックXを表示する 16C行 キー 表示 コメント001: STO I : 44 32 : スタックXをレジスタI(インデックスレジスタ)に入れる(STORE)002: 1 : 1 : スタックXに1を置数(DIGIT ENTRY) (スタックは上昇)003: LBL 0 : 43,22, 0 : ラベル0を設置(LABEL)004: RCL I : 45 32 : レジスタIからスタックXに入れる(RECALL) (リコール前のスタックXはスタックYに上昇)005: * : 20 : スタックYにスタックXを乗算してスタックXに入れる (スタックは下降)006: DSZ : 43 23 : レジスタIから1を減じ、 その結果レジスタIがゼロならば次の行をスキップする007: GTO 0 : 22 0 : ラベル0へ行く(GO TO)008: R/S : 31 : プログラムを停止し、スタックXを表示する このプログラムを実行するには、例えば下記のようにキー入力する。 GTO .00 プログラムカウンタを0行目にセット(10C及び12Cの場合) GTO .000 プログラムカウンタを0行目にセット(11C、12C Platinum及び16Cの場合) GTO CHS 000 プログラムカウンタを0行目にセット(15Cの場合) 6 階乗を計算すべき整数を入力 (例: 6 ) R/S 階乗を計算し結果を表示 (例: 6! → 720 ) プログラムが終了すると 720 という結果が表示される。 [P 1]~ ^ a b この例ではループカウンタとして使用しているレジスタの小数部がゼロである。この場合DSE命令はDSZ命令と同様の動作をする。小数部がゼロでない場合のDSE命令の詳しい動作については取扱説明書を参照
※この「プログラム例」の解説は、「HP-10Cシリーズ」の解説の一部です。
「プログラム例」を含む「HP-10Cシリーズ」の記事については、「HP-10Cシリーズ」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/16 15:58 UTC 版)
このプログラムは、2から69の指定した整数の階乗を計算するもので、5の階乗ならば、5 P0 と入力すると120を表示する。このプログラムはメモリ9バイト分となる。 Key-codeCommentP0 P0 でプログラムを起動させる Min00 レジスタ0に値を入力 1 1から開始 LBL0 ループ用ラベル * 乗算 MR00 レジスタ0の値を呼び出し DSZ GOTO0 レジスタ0の値から1を引き、0になるまでLBL0にジャンプする = 終了。 n! の計算結果が表示される
※この「プログラム例」の解説は、「FX-602P」の解説の一部です。
「プログラム例」を含む「FX-602P」の記事については、「FX-602P」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/01 03:23 UTC 版)
このプログラムは、2から69の指定した整数の階乗を計算するもので、5の階乗ならば5P0と入力すると120を表示する。アルファベット表示も含めて14バイトのプログラムとなる。 Key-codeCommentP0 P0でプログラムを起動させる ALPHA#!=ALPHA 1列目に "n!=" と表示。結果は2列目に表示される Min00 レジスタ00に値を入力 1 1から開始 LBL0 ループ用ラベル * 乗算 MR00 レジスタ00の値を呼び出し DSZ GOTO0 レジスタ00の値から1を引き、0になるまでLBL0にジャンプする = 終了。n! の計算結果が表示される
※この「プログラム例」の解説は、「FX-603P」の解説の一部です。
「プログラム例」を含む「FX-603P」の記事については、「FX-603P」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/17 20:57 UTC 版)
簡単なサンプルプログラムとその出力を示す。 1: beginchar(65,10pt#,10pt#,0pt#);2: pickup pencircle xscaled 1.2pt yscaled 0.5pt rotated 120;3: z1=(0.1w,0.75h);4: z2-z1=whatever*(8,1);5: x2=0.9w;6: z3=(0.8w,0.1h);7: draw z1--z2{z1-z2}..{z2-z1}z3;8: labels(1,2,3);9: endchar;10: end.行番号は説明のために付けてある。 1行目では文字の情報を定めている。この例では、文字コード65の文字を幅10pt, 高さ10pt, 深さ0pt(幅と高さが同じ値だが、引数はこの順)で作成することを宣言している。 2行目では文字を描くのに用いる“ペン”を定義している。このペンは単位円を縦横異なる比率で拡大縮小してできる楕円を120度回転させたもので、次の図のような形を持つ。 3行目から6行目までで3つの点の位置を定めている。3つの点はそれぞれ z1, z2, z3 で、図中では1,2,3とラベルを付けて表示してある。w と h の値は1行目の宣言によって決められて、この例では左下の座標が (0,0)、右下が (w,0)、右上が (w,h) 等となる。 z1 と z3 はそれぞれ3行目と6行目で明示的に決められる。 z2 の決め方に METAFONT の特徴がよく現れている。4行目の段階では「z1 から z2 へ向かうベクトルが (8,1) という成分を持つベクトルの何倍かになっている」ことだけが定義されている。続く5行目で z2 のx成分が明示的に与えられると、z2 の位置が自動的に決定される。METAFONT 内部では、4行目の段階で一次方程式が作られたのちに5行目と併せて解かれている。 7行目で文字を描く。まず z1 から z2 へ直線を引き、z2 からは、z2 から z1 へと向かう方向へ線を引き始める。その線は滑らかな曲線を描きながら z3 へと向かうのだが、最終的に z3 へたどり着くときには z1 から z2 へと向かう方向を向くようにする。 8行目では、3つの点にラベルを付けて表示させている。 9行目で、1行目から続いた文字コード 65 の文字は終了する。さらに他のコードの文字を描きたければ1行目と同様に続けることもできる。 10行目で1文字しかないこのフォントセットが終了する。 (他のプログラム例がw:de:Metafontにも)
※この「プログラム例」の解説は、「METAFONT」の解説の一部です。
「プログラム例」を含む「METAFONT」の記事については、「METAFONT」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/26 13:32 UTC 版)
2本のストリームをマージして1本のストリームにするStrandプログラムの例を以下に示す。Prologと同様、A や Xs など英大文字で始まる項は変数を表す。 merge([A|Xs],Ys,Zs0) :- true | Zs0:=[A|Zs], merge(Xs,Ys,Zs).merge(Xs,[A|Ys],Zs0) :- true | Zs0:=[A|Zs], merge(Xs,Ys,Zs).merge([],Ys,Zs) :- true | Zs:=Ys.merge(Xs,[],Zs) :- true | Zs:=Xs. 例えば、上記プログラムの最初の節では、最初の引数が[A|Xs]のようなリストの形になっていない場合は中断し、他のプロセスにより[A|Xs]の形に具体化された(具体的に値が決まった)場合に実行を再開する。この時点でXs自体は具体化されていなくても構わないため、リストの先頭からインクリメンタルに具体化されるストリームを素直に処理できる。
※この「プログラム例」の解説は、「Strand」の解説の一部です。
「プログラム例」を含む「Strand」の記事については、「Strand」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/03 01:23 UTC 版)
「並行論理プログラミング」の記事における「プログラム例」の解説
エラストテネスのふるいを使い素数生成を行うGuarded Horn Clauses (GHC) のプログラム例を示す。Prologと同様、MaxやPrimesなどの英大文字で始まる項は変数を表す。 gen_primes(Max,Primes) :- gen(2,Max,Ns), sift(Ns,Primes). gen_primes/2を実行すると、gen/3とsift/2の2つのプロセスが生成される。gen/3はMaxまでの自然数のストリームを生成し、sift/2はそれをふるいにかけ素数のストリームをPrimesに返す。gen/3とsift/2とはそれぞれ並行して動き、gen/3で生成された自然数のストリームは変数Nsを介して順次sift/2に渡される。プロセス間の同期は、ストリームの各要素が具体化(Instantiation)されるまで待つ、という形で自然に表現される。 gen/3、sift/2の各プログラムはそれぞれ以下のようになる。gen/3は、自然数のストリームを順次生成しMaxを超えたら終了する。sift/2は、2,3,5,7,..などの各素数の倍数をストリームから取り除くfilterプロセス(ふるい)を順に生成しながら、求まった素数を順次ストリームの要素として返す。各filterプロセスは変数を介して直列につながれていくため、自然数のストリームから素数のみのストリームを求めることができる。 gen(N0,Max,Ns0) :- N0=
※この「プログラム例」の解説は、「並行論理プログラミング」の解説の一部です。
「プログラム例」を含む「並行論理プログラミング」の記事については、「並行論理プログラミング」の概要を参照ください。
プログラム例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2017/05/03 04:48 UTC 版)
「Program Composition Notation」の記事における「プログラム例」の解説
可変変数 m の内容がリスト x の要素であれば true(1) を、そうでなければ false(0) を返すプログラムの例を以下に示す。 member(x,m,r)int m, r;{? x ?= [] -> r:= false, x ?= [vlxs], v == m -> r:= true, x ?= [vlxs], v != m -> member(xs, m, r)} 二分木(バイナリツリー)t の高さ z を求めるプログラムの例を以下に示す。ツリーの要素は {left, val, right} か空のタプルで表現されているものとする。各枝の深さは並行して計算され、定義変数 l と r によりheightの実行とzの計算との同期が行われる。 height(t,z){? t ?= { } -> z = 0, t ?= {left, val, right} -> {|| height(left, l), height(right, r), {? l >= r -> z = 1 + l, r >= l -> z = 1 + r } }}
※この「プログラム例」の解説は、「Program Composition Notation」の解説の一部です。
「プログラム例」を含む「Program Composition Notation」の記事については、「Program Composition Notation」の概要を参照ください。
- プログラム例のページへのリンク