------------------ 私が投稿したニュースの記事です ------------------ Newsgroups: fj.lang.fortran From: kazov@math.keio.ac.jp (NISHIMURA Kazuo) Subject: "Shoukai Fortran 90" official patch Message-ID: Summary: for the Japanese translation of Fortran 90 Explained Keywords: mistypo, errata Sender: nishimura@math.keio.ac.jp (NISHIMURA Kazuo) Organization: Faculty of Sci. and Tech., Keio Univ., Yokohama, Japan. Distribution: fj Date: Mon, 8 May 1995 10:44:35 GMT Lines: 432 訳書“詳解 Fortran 90”についての、訳者らによる正式な訂正です。 書籍: Michael Metcalf and John Reid (著), 西村恕彦, 和田英雄, 西村和夫, 高田正之(訳), 詳解 Fortran 90, bit別冊, 共立出版, 1993. 都合により、第1部と第2部に分かれており、形式が統一されていません。 (ファイルの編集中に誤りが混入することを避けるため、あえてしません。) この点、御了承ください。 ISO規格については、すでに2度の正式な訂正 (Technical Corrigendum) が発効しています。そのうち1度目のもの(TC1)は、JIS規格には反映 されましたが、この訳書はすでに発行されていたため、(一部は)反映できま せんでした。 % 以下の訂正には、TC1によるものを含んでいます。これによって、この訳書 とJISとが一致することになります。 % また、TC2は反映しません。JISと一致しなくなるのを避けるためです。 なお、普段はニュースを読んでおりません。ログインは週に1回程度です。 =========================== 訂正【第1部】=========================== 詳解 Fortran 90 の訂正 (94-11-07) X01: p. 182 下 (図 8.2)------------------------------------------ 整数型の HUGE(X): r^q-1 -1 q q 4 3 2 1 ↓ q q-1 4 3 2 1 X02: p. 238 中 (練習問題)---------------------------------------- (d) REAL(10,100) :: POWER(10) …… 1 行に 5 個ずつ,工学表記で。 ↓ (d) REAL POWER(10,100) …… 1 行に 5 個ずつ,工学表記で。 X03: p. 290 下 4箇所 (付録 D)---------------------------------- 親プログラム単位 ↓ 親プログラム X04: p. 298 下 (付録 E)------------------------------------------ character(*),parameter:: eot = 'End-of-Tree ...'! モジュール定数 ↓ character(*),parameter:: eot = 'End-of-Tree ...'! モジュール定数 X05: p. 309 上 (付録 F, 第 2 章, 7.)----------------------------- BOOK("pilgrim's progress",(/ 'John','Bunyan'/),250) ↓ BOOK("pilgrim's progress",(/ 'John ','Bunyan'/),250) ^^ 理由: 配列構成子の要素の型パラメタは同じでなければならない。 X06: p. 314 下 (付録 F, 第 5 章, 2.)-----------------------------  実はこの DO ループは,次の組込み関数で実行できる。 c = dot_product(a,b) ↓  実はこの DO ループは,次の組込み関数で実行できる。 c = matmul(a,b) X07: p. 316 中 (付録 F, 第 5 章, 6.)----------------------------- cards = (/ c, c=1,52 /) ↓ cards = (/ (c, c=1,52) /) X08: p. 319 上 (付録 F, 第 6 章,8.)----------------------------- cell,pointer :: link ! 次のセルへのポインタ ↓ type(cell),pointer :: link ! 次のセルへのポインタ X09: p. 319 中 (付録 F, 第 6 章,8.)----------------------------- if (.not. allocated(head)) return ! リストが空なら何もしない ↓ if (.not. associated(head)) return ! リストが空なら何もしない X10: p. 324 中 (付録 F, 第 9 章, 3.)-------------------------------------- 修正箇所(変更、挿入、削除)を行頭の1字で示す: 変 character line*132,type,delim integer x,dx logical cont = .false. print *, '説明:" " 開始行, "#" 文番号付き開始行, "&" 継続行' print *, ' "!" 注釈行, "?" 複数の文を含む行' do 挿 read (*,'(a)',end=99) line 変 call first_char do select case (line(x:x)) case (';') type = '?' case ('&') cont = .true. case ('"', "'") 挿 delim = line(x:x) do 変 dx = scan(line(x+1:), delim) if (dx > 0) exit print *, type//trim(line) cont = .true. 挿 read (*,'(a)',end=99) line 変 call first_char 挿 x = x-1 end do x = x+dx case ('!') exit end select x = x+1 if (x > len_trim(line)) exit end do print *, type//trim(line) end do 挿 99 if (cont) print *, '継続行で終わっている' contains 変 subroutine first_char 削 read (*,'(a)',end=99) line x = max(1,verify(line,' ')) select case (line(x:x)) case default type = ' ' case ('0':'9')t type = '#' case ('&') x = x+1 case ('!', ' ') type = '!' return end select if (cont) type = '&' cont = .false. end subroutine 変 end X11: p. 334 中 (訳者あとがき)------------------------------------ KIND 指定は,もともと高田が国内委員会で提案し, ↓ KIND 指定は,菅 忠義,西村和夫,高田正之らが国内委員会で提案し, ---------------- “制御変数”を“DO 変数”に変更する ---------------- X12: p. 73 中右(18 行目) 制御変数 → DO 変数 X13: p. 73 中左(21 行目) 制御変数 → DO 変数 X14: p. 76 上左(3 行目) 制御変数 → DO 変数 X15: p. 76 上右(4 行目) 制御変数 → DO 変数 X16: p. 76 中中(15 行目) ループ制御変数 → DO 変数 -------- 利用者定義演算,利用者定義代入の手続の仮引数に INTENT 属性がない。これを挿入する。具体的には次のとおり。---------- X17: p. 51 下 (3.8)........................................ TYPE(INTERVAL) ADD_INTERVALS,A,B ↓ TYPE(INTERVAL) ADD_INTERVALS TYPE(INTERVAL),INTENT(IN) :: A,B X18: p. 53 中 (3.8)........................................ TYPE(INTERVAL) ADD_INTERVAL_REAL,A REAL B ↓ TYPE(INTERVAL) ADD_INTERVAL_REAL TYPE(INTERVAL),INTENT(IN) :: A REAL,INTENT(IN) :: B X19: p. 54 中 (3.9)........................................ REAL A TYPE(INTERVAL) B ↓ REAL,INTENT(OUT) :: A TYPE(INTERVAL),INTENT(IN) :: B X20: p. 54 中 (3.9)........................................ TYPE(INTERVAL) A REAL B ↓ TYPE(INTERVAL),INTENT(OUT) :: A REAL,INTENT(IN) :: B X21: p. 121 下 (6.5)....................................... TYPE (INTERVAL) ADD00,A,B ↓ TYPE (INTERVAL) ADD00 TYPE (INTERVAL),INTENT(IN) :: A,B X22: p. 121 下 (同上)...................................... TYPE (INTERVAL),DIMENSION(:) :: A TYPE (INTERVAL),DIMENSION(SIZE(A)) :: B,ADD11 ↓ TYPE (INTERVAL),DIMENSION(:),INTENT(IN) :: A TYPE (INTERVAL),DIMENSION(SIZE(A)),INTENT(IN) :: B TYPE (INTERVAL),DIMENSION(SIZE(A)) :: ADD11 X23: p. 122 上 (図 6.4)..................................... FUNCTION MULT(A,B) TYPE(MATRIX),DIMENSION(:,:) :: A TYPE(MATRIX),DIMENSION(SIZE(A,2)) :: B ! SIZE は 8.12.2 にある組込み関数 TYPE(MATRIX),DIMENSION(SIZE(A,1)) :: MULT ↓ FUNCTION MULT(A,B) TYPE(MATRIX),DIMENSION(:,:),INTENT(IN) :: A TYPE(MATRIX),DIMENSION(SIZE(A,2)),INTENT(IN) :: B ! SIZE は 8.12.2 にある組込み関数 TYPE(MATRIX),DIMENSION(SIZE(A,1)) :: MULT X24: p. 317 中 (付録 F, 第 5 章, 7.)....................... SUBROUTINE C_TO_S_ASSIGN(S,C) TYPE (STRING) :: S CHARACTER(LEN=*) :: C ↓ SUBROUTINE C_TO_S_ASSIGN(S,C) TYPE (STRING), INTENT(OUT) :: S CHARACTER(LEN=*), INTENT(IN) :: C X25: p. 317 下 (同上)...................................... SUBROUTINE S_TO_C_ASSIGN(C,S) TYPE (STRING) :: S CHARACTER(LEN=*) :: C ↓ SUBROUTINE S_TO_C_ASSIGN(C,S) TYPE (STRING), INTENT(IN) :: S CHARACTER(LEN=*), INTENT(OUT) :: C X26: p. 317 下 (同上)....................................... FUNCTION STRING_CONCAT(S1,S2) TYPE (STRING) :: S1,S2,STRING_CONCAT ↓ FUNCTION STRING_CONCAT(S1,S2) TYPE (STRING) :: STRING_CONCAT TYPE (STRING), INTENT(IN) :: S1,S2 X27: p. 320 中 (付録 F, 第 6 章, 9.)........................ subroutine assign_vs (l,r) ! 実数型スカラを1次元配列に代入 real :: r type (matrix),dimension(:) :: l ↓ subroutine assign_vs (l,r) ! 実数型スカラを1次元配列に代入 real,intent(in) :: r type (matrix),dimension(:),intent(out) :: l X28: p. 320 下 (同上)....................................... function add_vv(a,b) ! 1次元配列どうしの加算 type (matrix),dimension(:) :: a type (matrix),dimension(size(a)) :: b,add_vv ↓ function add_vv(a,b) ! 1次元配列どうしの加算 type (matrix),dimension(:),intent(in) :: a type (matrix),dimension(size(a)),intent(in) :: b type (matrix),dimension(size(a)) :: add_vv X29: p. 320 下 (同上)....................................... function mult_vs(a,b) ! 1次元配列とスカラとの乗算 type (matrix) :: b type (matrix),dimension(:) :: a type (matrix),dimension(size(a)) :: mult_vs ↓ function mult_vs(a,b) ! 1次元配列とスカラとの乗算 type (matrix),intent(in) :: b type (matrix),dimension(:),intent(in) :: a type (matrix),dimension(size(a)) :: mult_vs =========================== 訂正【第2部】=========================== 詳解 Fortran 90 の訂正 (95-02-12) A02: p.55 図3.8 【変数A】→【変数P】 A03: p.114 l.16 【(図4.8参照)】→【(図4.9参照)】 A04: p.122 図6.4 次の2行を左に寄せる(DO, FUNC に揃える) 【 END DO END FUNCTION 】 A05: p.127 l.2↑ 【図6.6の連鎖】→【図6.7の連鎖】 A06: p.128 l.1 【図6.6の文】→【図6.7の文】 A07: p.135 l.1 【(図6.6)で】→【(図6.7)で】 A08: p.164 l.25〜26 【派生型】→【構造型】 A09: p.180 l.5〜8, l.10〜13 字下げする(前ページ参照) A10: p.199 l.22 【PRINT *, ASSOCIATED(P1,P2)】の下に次の1行を追加。 【 PRINT *, ASSOCIATED(P1,P2(4:1:-1)) 】 A11: p.238 練習問題2. 【変数 NUNIT】→【変数 UNIT】 B19: p.170 第1行【 END PROGRAM ZIPPY 】の次の行に次を挿入。 【 適当なテストデータは、次のとおりである。 Prof. James Bush, 206 Church St. SE, Minneapolis, MN 55455 J. E. Dougal, Rice University, Houston, TX 77251 Jack Finch, 104 Ayres Hall, Knoxville, TN 37996 】 B21: p.175 l.7 【論理値 .TRUE. を返す。】の次に追加。 【上下限が異なるとき,たとえば LBOUND(A)=0 であってポインタ代入 文 P=>A(:) のあとで ASSOCIATED(P,A) を評価したとき,.FALSE. が 返るとは限らない。】 B22: p.215 l.15 の下に第5項として次の1行を追加 【 ・長さがゼロでない。 】 C01: p.31 l.4 【添字や】→【配列定数に添字や】 C02: p.304 l.13 この行(最初の rewind unit)削除 説明:新規ファイルの場合、OPEN 文で始点に位置づけられるので、 なくてもよい。あっても間違いではないが原文に合わせる。 D01: p.93 5.7.3のパラグラフの2行目 【結合したポインタ】→【結合し指示状態であるポインタ】 D09: p.104 l.3 【手続引用仕様宣言】→【手続引用仕様本体】 D10: p.104 l.5 【引用仕様宣言】→【引用仕様本体】 D11: p.105 l.16 【これによって引用仕様宣言は,】→【これによって引用仕様本体は,】 注意: 行内に【引用使用宣言】は二つある。右のものだけを変更。 D12: p.107 l.6 【YVAL = INTEGRATE (F, XBOUNDS)】 ↓ 【YVAL = Y FY = INTEGRATE (F, XBOUNDS)】 D13: p.108 5.18の第1パラグラフの4行目の 【個別引用仕様宣言】→【引用仕様本体】 D14: p.109 l.16 【引用仕様宣言】→【引用仕様本体】 D15: p.109 l.18, l.33 【個別引用仕様宣言】→【引用仕様本体】 D16: p.110 l.7 【個別引用仕様宣言】→【引用仕様本体】 D17: p.119 l.17〜18 【呼出しごとに大きさの変わる配列が手続の仮引数 にあって,手続の側でやはり大きさの変わる局所的な配列を必要とすることがあ る。】 ↓ 【手続の仮引数が配列であって,その配列の大きさが呼出しのたびごとに変わる 場合には,その手続内にやはり大きさが変化する局所的な配列が必要となること がある。】 D22: p.137 l.3 【のように,】→【のような】 D25: p.144 最後の2行 【... 別の言語要素を宣言すると, そこでは親プログラムのその名前の構造型は, 参照不能になる。 そして, その英字に対する暗黙の構造型もまた抑制されて無効になる。】 ↓ 【... 別の言語要素を宣言しても, そこでその英字に対する暗黙の構造型は有効である。】 D26: p.145 l.8-9 【 FUNCTION FUN(I) ! すべてのデータ要素は,明示的に INTEGER FUN,I ! 宣言しなければならない 】 ↓(TC1 による) 【 FUNCTION FUN(I) ! すべてのデータ要素を明示的に INTEGER FUN ! 宣言する必要はない 】 D30: p.144 下から10行目の【のように,】の後に付加 【プログラム単位や引用仕様宣言以外の】 D31: p.321 下から6行目 【INTEGER】→【REAL】 下から5行目 【REAL】→【INTEGER】 D32: p.174 l.8↑ 【2 回書いてもならない。】を次のとおりに変更。 【2 回書いてもならず,さらにその有効域内の EXTERNAL 文に書いて もいけない。】 D34: p.210, 図9.6 【一つの記録】の右に右矢印(→)を補い、その右の長方形(横長) にアミをかける。 D35: p.182 l.4 【p は 1 以上,b は 2 以上】→【p および b は 2 以上】 D36-1: p.217 l.8 【第2位置パラメタとして,書式識別子のかわりに変数群名を書くか,】 ↓ 【書式識別子のかわりに変数群名を第2位置パラメタとして書くか,】 D36-2: p.217 l.19 【変数群入力文の実行は,入力の並び中に文字定数の外で斜線が現われて終 了する。】 の後に次の文を追加する。 【ただし,変数群中のすべての名前に対する名前-値対応を処理した後で記録 の終わりに到達したときにも終了する。】 -- NISHIMURA Kazuo nishimra@math.keio.ac.jp [修,破,離] Dept of Business Administration / Komazawa Univ