[東浩紀] 十夜一冊 第二千二百四十夜 東浩紀著「訂正する力」(朝日新聞出版、2023年)

{12/06/2023: [図書館]うっかり・勘違い「延滞」駆動型読書論 - 読書の車輪}←から、もう一度なんとなく雑談してみる。たぶんアーカイブは残らない。 ゲンロン YouTube Official チャンネル登録者数 3.13万人 登録済み 1762 共有 6.5万 回視聴 3 日前 に配信済み。ここで、応援せよと何度も言われたのと、Kindleなら400円で買えると言われたので調べて購入。要するに440ポイントが付くので、実質半額になるということだった。まあ、最近の著書を調べつつ「訂正する力」にも興味を持っていたから、これ幸いと購入した。図書館に購入依頼予約済みだったのだが、そちらはキャンセルした。購入依頼は予約の件数としてカウントされるので。

{11/21/2023: [東浩紀]返却日駆動型読書論 - 「ゲンロン 0 2017 April 観光客の哲学」(genron)と『ゲンロン戦記 「知の観客」をつくる』(2020年、中公新書ラクレ)}←のうち、前者は県立図書館で借りて眺め、興味が湧いたので自前で古本を購入。後者は市立図書館で借りて読了。前者については、【書評特別篇】ケーニヒスベルク人の夢をたどる観光客──東浩紀『観光客の哲学』評|ユク・ホイ 訳=伊勢康平 | webゲンロン | 考えるを育てるに最良の解説がある。

「訂正する力」は過去を訂正して未来につなげる力を意味している。過去から未来を創る。ある意味、大変自然な思考である。更新日記でも何度も同じようなことを書いている。

更新: 2023-12-08T22:15:30+09:00

[A.I.] Bard の新機能が日本語に対応

{十夜一冊 第二千二百五十夜 ウンベルト・エーコ著、藤村昌昭訳「フーコーの振り子」(文藝春秋、1993年、原著; 1988年) (12/09/2023)}{十夜一冊 第二千二百五十一夜 「フーコーの振り子」のパスワード探し - プログラムとカバラ (12/11/2023)}←の続き。添付した画像ファイルからの読み取りができるようになったが、Google Documentsで画像ファイルを開いたのと同程度の精度でまともなBASICプログラムではないが、Perlへの書き直しは見事にできている。Copilot/Bing並み。

# anagrams.pl
use strict;
use warnings;
sub anagrams {
  my @strings = @_;
  my @anagrams;
  for (my $i = 0; $i < @strings; $i++) {
    for (my $j = 0; $j < @strings; $j++) {
      if ($i != $j) {
        for (my $k = 0; $k < @strings; $k++) {
          if ($i != $k && $j != $k) {
            for (my $l = 0; $l < @strings; $l++) {
              if ($i != $l && $j != $l && $k != $l) {
                push @anagrams, join('', @strings[$i, $j, $k, $l]);
              }
            }
          }
        }
      }
    }
  }
  return @anagrams;
}
my @strings = qw(a b c d);
print join("\n", anagrams(@strings));

結局、文脈から類推して、意味的にPerlのプログラムを生成していると思われる。論理的に(機械的に)BASICのプログラムを変換しているのではない。これは、Copilot/Bingでも同じだった。このプログラムでは、Perlの配列をスカラーコンテキストで評価すると配列数を返すこと、配列数は配列の最後の要素のインデックスよりも1大きいことをfor文で利用している。しかし、それを本当に理解しているかどうかは怪しい。

正確なBASICプログラムそのものを渡すと、Copilot/Bingも新機能に対応していないBardも両方とも同じ場所で間違った。

新機能を持つBardにも正確なBASICプログラムそのものを渡してみた。次のようなPerlプログラムが返った。

# anagrams.pl
use strict;
use warnings;
# 入力文字列を取得する
my @letters = split(//, <STDIN>);
# すべての組み合わせを生成
for my $i (0 .. $#letters - 3) {
    for my $j ($i + 1 .. $#letters - 2) {
        for my $k ($j + 1 .. $#letters - 1) {
            for my $l ($k + 1 .. $#letters) {
                # 組み合わせを表示する
                print "$letters[$i]$letters[$j]$letters[$k]$letters[$l]\n";
            }
        }
    }
}

このプログラムをWindowsのコンソールで実行すると、次のようになる。

新機能対応BardでBASIC-Perl変換を試す

../新機能対応BardでBASIC-Perl変換を試す

配列の最後の要素のインデックス$#lettersは、標準入力で「abcd[return]」と入力すると、「4」になる。改行が配列に入ってしまっている。chompなどで改行を取ることが必要なんだけど、いずれにせよ、このプログラムで、「すべての組み合わせを生成」することはできない。


要は、for文のループがどのように動いているか、きちんと整理してみるまでは、何が起こっているかわかりにくい。改行が余分に生じているのはなぜかがわかれば、何が起こっているかわかる。

for文で生ずる配列要素のインデックスの組み合わせ
配列要素インデックス名組合せ1組合せ2組合せ3組合せ4組合せ5
一番目の配列要素インデックス、i00001
二番目の配列要素インデックス、j11122
三番目の配列要素インデックス、k22333
四番目の配列要素インデックス、l34444
「abcd[return]」と入力した場合の出力abcdabc\nabd\nacd\nbcd\n

元のBardのほうが、まじめにもとのBASICを変換しようとしていて微笑ましい。

これまでの結果から、Copilot/BingやBardなどの生成系AIは思考しているわけではないことは明白だ。事実や論理を求めてはいけない。よく言われることだが、「next token prediction」に過ぎないという話。詳しくは、ChatGPTの仕組み超解説:ChatGPTの裏側大解剖|ChatGPT研究所を参照かな。大規模言語モデルを使うと、その予測は人が驚くくらいもっともらしくなる。特に会話は得意。世界の情報データベース、インターネットが学習の基盤にあるわけだから、単なる人よりも遥かに様々なことを知っているように見えるはずだ。

更新: 2023-12-23T21:54:19+09:00

[通信] クリスマス、誤配からの脱却 - 思慮の浅さ、勘違い

auひかりの遅さを何度かディスってきたが、カテゴリ5のLANケーブルのことを1Gbps対応と勘違いしていた(→{追記(2023-12-26): いや、ONUとルーターを接続するLANケーブルに、カテゴリ5eを使っていたのを確認したので、当時、2011年11月には理解していた可能性が高い})。Windows PCのリンク速度が、100Mbpsと表示されたのと、みん速の数百MbpsのデータがスマホのWiFi接続で得られていることに気づいたことが切っ掛けで、誤解が解けた。まず、iPhone XRでWiFiで接続して、みん速で計ってみる。予想通りであるとはいえ、びっくりした。そうして、PCのWiFiで接続すると300-500Mbps出ている。

2023-12-25 19:18 iPhone XR WiFi on みん速(Chrome)

../2023-12-25 19:18 iPhone XR on みん速


2023-12-27 13:09 iPhone XR WiFi on みん速(Chrome)

../2023-12-27 13:09 iPhone XR on みん速


auひかり × @niftyの測定結果の詳細(2023-12-27 10:20頃、Windows PCのWiFi接続、みんなのネット回線速度(みんそく) | 速度比較が出来る通信速度測定サイトにて)
種類IPv4接続IPv6接続
Jitter7.6ms0.85ms
Ping21.3ms21.4ms
下り557.76Mbps(超速い)571.74Mbps(超速い)
上り362.47Mbps(非常に速い)398.91Mbps(非常に速い)

WiFi接続のApple TVのSPEEDTESTというアプリでは、ダウンロード、540Mbps、アップロード、552Mbpsが、2023年12月27日15:05頃(Server: GSL Networks Tokyo 675km)出ている。Ping、18ミリ秒、ジッター、1ミリ秒、ロス、2.5%。

そもそも、ONUのゲートウェイのオレンジ色の点滅は1Gbps接続を意味している。これについての認識も足りなかった。LANケーブルのCat(カテゴリ)とは?Cat5e(カテゴリ5e)とCat6(カテゴリ6)の違いについて | LANケーブルと結束バンドならパンドウイットなどや、Amazonをみると、すでにカテゴリ8までのLANケーブルが販売されている。最早、浦島太郎になっていたわけだ。過去の情報は長い年月をかけて誤配に変化してしまう。

@niftyでauひかりを使う意味が、固定電話を光電話に変えることによってUQ Mobileとのセット割(自宅セット割、インターネットコース)ができることで出てくる。しかも、ルーターを新しくして(BL190HW→BL1500HW)通信速度の改善を試すことができ、加えてルーターのレンタル料も無料になるという話でよいことばかり。最後に通信速度が改善されれば、文句はなくなったという話。イオンでアルパークから出張してこられたauショップに声を掛けてもらわなければ、もやもやした誤配状態が新年も続いていただろう。

本アイデアはルーターの傍に固定電話機を光電話として置く必要があることも問題だったのだが、使用場所で子機を使えばよいことに気が付いた。万全だ。

過去、ギガのスイッチングハブも導入していたはずだが、最近はケーブルをしっかり押さえずに使っていた。Ethernetの有線接続がWiFiの無線接続に勝るという固定概念が覆された。

更新: 2023-12-28T10:24:12+09:00

[通信] 年末の異常は自らが招く

やれやれ。よくわからないインターネットへの接続異常が続く・・・ONU、ルーターを再起動しても不安定。

auひかり × @niftyの測定結果の詳細
種類IPv4接続IPv6接続
Jitter17.24ms36.54ms
Ping22.7ms21.9ms
下り204.82Mbps(非常に速い)266.18Mbps(非常に速い)
上り90.88Mbps(かなり速い)164.99Mbps(かなり速い)

LANにWiFiの中継器をつないだことが原因らしい。はずすと元に戻った。

更新: 2023-12-29T21:41:29+09:00

[日記] 世界の混迷 - ガザ爆撃再開

サンデーモーニングの話題もほとんど暗い話ばかり。ハマスもイスラエルもここで考え直さないと・・・

「どうする家康」の「大坂の陣」では、家康が、孫の千姫のいる本丸への砲撃に際して、苦渋の決断をする姿が描かれる。戦のない世界をいかにつくるかを問うている・・・

更新: 2023-12-04T10:42:26+09:00

[日記] 日々が過ぎ去り、断片的に書き留める - Live at Keystone Korner 1980(Timeless)、モナーク: レジェンド・オブ・モンスター、窓際のスパイ、そして、REACHER

更新日記を日記記述言語で書き留める最低の構成要素要件は、カテゴリ、タイトル、description(RSS/Atom)に対応する最初の段落要素。in between days 表参道で働くシニアのブログ 2022-08-18 ビル・エヴァンスのラスト・レコーディングについては既にリンクを張ったかもしれないが、Live at Keystone Korner 1980: VOL.3(Timeless)から「Re: Person I Knew (LIVE)」を繰り返して聴いている。{「時代の兆し」を探して (2023/09/10)}{混沌世界を整理する - Apple Music Classical (2023/09/22)}←。時代を超えたピアノ表現、今聞いても新しい感覚、これ以上の表現はないだろうと感じさせる斬新さがある。Re: Person I Knew - Wikipedia

「大事なのは進むこと」、モナーク: レガシー・オブ・モンスターのエピソード6の女性ハッカー(メイ)が女性主人公(ランダの娘、ケイト)に掛けた言葉。大谷翔平のドジャース入団の中國新聞の見出し「常に挑戦」と重なる。アメリカ的精神と言えるのかもしれないが、大切なことだと、今頃というか、ここ数年の間に思いとして浮かび上がり、強い確信となっている。米国製ゴジラ映画にモナーク(Monarch)という組織名が出てきたのは、最近、Prime Videoで見た「ゴジラ VS. コング」の特務機関モナークが最初だが、その性格は今のところだいぶ異なる。

1954年の米軍のMonarch Projectと2015年のMonarchとの関係が謎になる。両方の異時間世界のGodzillaが描かれる。

なんども、これはすごいと記事を書こうと思いつつ書けなかったものがいろいろとあるが、これは面白い。次第に良くなっているのが「窓際のスパイ」シーズン3。Apple TV+『窓際のスパイ』シーズン3、『ファンタビ』のあの人が登場!配信日が決定&ファーストルックが公開 - 海外ドラマNAVIの最後には「すでにシーズン4への更新が決定しており、ヘロンのシリーズ4作目となる小説「Spook Street」が脚色される。」とある。シーズン3は放たれた虎 | ミック・ヘロン | ハヤカワ・オンラインに対応している。{十夜一冊 第二千百五十夜 ミック・ヘロン著「放たれた虎」(早川書房、2017年) (03/19/2022)}←。ま、ユーモア満載、皮肉も効いている。

リーチャー、シーズン2は、パスワードは嫌いだという場面が何度も出てくる。それを当てるのにコンピュータのプログラムは使わない。人間的。このシリーズもよくなっている。ジャック・リーチャー -正義のアウトロー- - Wikipediaに詳しい。いかにもアメリカ的なキャラクターだが、リー・チャイルド - Wikipediaによれば、ジャック・リーチャー・シリーズはイギリスの小説家の作品。

日記カテゴリでもあるので、{値上げの秋 (11/01/2022)}←の「※追記(2022-11-05): イオンみゆき店では、低脂肪牛乳が170円になっていた。キチンと以前の158円から値上げされていることがラベルで表示されていた。今のところ、気づいたのはこれだけ。」に反応。今は、同じものが188円也。20%近い上昇だ。

更新: 2023-12-16T13:48:02+09:00

[図書館] うっかり・勘違い「延滞」駆動型読書論 - 読書の車輪

実際のところ、延滞を回避するのは結構難しい。返却期限に借り直したつもりになっていた。当日図書館に訪れたのにも拘わらず、返却3冊・貸出3冊だけで済ませて帰っている。尤も、借り直すべき2冊を持って行っていないのだから、手続きできるはずもない。ほとんど毎日、注意してホームページの利用状況一覧にアクセスしているにも拘らず、10冊も借り出していると、うっかり・勘違いが生じる。言い訳ではないが、人間は間違う動物だ。それはともかく、結果として、延滞は返却を促す。読書の車輪が回り始める。

最新借出冊数推移(~2023年12月6日現在)

../最新借出冊数推移(~2023年12月6日現在)

なんとなく雑談してみる。たぶんアーカイブは残らない。 ゲンロン YouTube Official チャンネル登録者数 3.11万人 登録済み 5.1万 回視聴 1 日前 に配信済みによれば、東浩紀氏の年間読書数は150から200冊程度。年間200冊の借り出し数もざっくり読むことができる冊数として妥当な数ということができそうだ。


予約かごには93冊の本が予約を待ちながら眠っている。予約に入らないままに他の本に場所を譲って削除されるものもある。もう何を切っ掛けに予約かごに入ったのかさえ忘れられている。予約されるかどうかは運命なのである。

借り直した2冊を記録しておこう。推測と反駁、科学的知識の発展、叢書・ウニベルシタス、カール・R.ポパー /著, 藤本 隆志 /〔ほか〕訳 、法政大学出版局、1980、791p孤独の迷宮、メキシコの文化と歴史、叢書・ウニベルシタス、オクタビオ・パス /著, 高山 智博 /訳, 熊谷 明子 /訳、法政大学出版局、1982.10、311p

[プログラミング言語] 十夜一冊 第二千二百五十夜 ウンベルト・エーコ著、藤村昌昭訳「フーコーの振り子」(文藝春秋、1993年、原著; 1988年)

上巻、59ページにBASICのプログラムがある。ちょっと眺めるぐらいでは、FORループとGOTO文が入り組んでいて、動作が読み取りにくい。Perlに書き直すとどうなるかな。今どきなら、AIの力を借りたい。Windows EdgeにはCopilotが搭載されたところ。これを試しに使ってみよう。

「フーコーの振り子」上巻、59ページのBASICプログラム

../「フーコーの振り子」上巻、59ページのBASICプログラム

Copilotに「次のプログラムをPerlに書き直してください」と言って、この画像ファイルをアップロードすると、プログラムを読み取って、BASICだという。それをPerlに書き直したものも示される。注意して実行せよと。


10 REM anagrams
20 INPUT L$(1),L$(2),L$(3),L$(4)
30 PRINT
40 FOR I=1 TO 4
50 FOR I2=1 TO 4
60 FOR I3=1 TO 4
70 IF I3=I2 THEN 120
80 FOR I4=1 TO 4
90 IF I4=I3 THEN 150
100 LET L$(1)=L$(1)+L$(2)+L$(3)+L$(4)
110 PRINT L$(1)
120 NEXT I4
130 NEXT I3
140 NEXT I2
150 NEXT I

→{追記: あれ、読み取れていないのか。}

sub anagrams {
    my @letters = @_;
    for my $i (0..3) {
        for my $i2 (0..3) {
            next if $i2 == $i;
            for my $i3 (0..3) {
                next if $i3 == $i2 || $i3 == $i;
                for my $i4 (0..3) {
                    next if $i4 == $i3 || $i4 == $i2 || $i4 == $i;
                    my $word = join('', $letters[$i], $letters[$i2], $letters[$i3], $letters[$i4]);
                    print "$word\n";
                }
            }
        }
    }
}
anagrams('L1', 'L2', 'L3', 'L4');

見事に動く。Perlのほうは。ただBASICのほうは、PC-BASIC(PC-BASIC)で動かすとエラーになる。「NEXT without FOR in 120」、僕もそう思うね。

10 REM anagrams
20 INPUT L$(1),L$(2),L$(3),L$(4)
30 PRINT
40 FOR I1=1 TO 4
50 FOR I2=1 TO 4
60 IF I2=I1 THEN 130
70 FOR I3=1 TO 4
80 IF I3=I1 THEN 120
90 IF I3=I2 THEN 120
100 LET I4 = 10 - (I1 + I2 + I3)
110 LPRINT L$(I1);L$(I2);L$(I3);L$(I4)
120 NEXT I3
130 NEXT I2
140 NEXT I1
150 END

「フーコーの振り子」に書かれている通りなら動く。これが読み取れていないのに、なぜ、意図通りのPerlのプログラムが書けたのだろう。

anagrams on Copilot

../anagrams on Copilot


ついでに、Bardも試した。Gemini(Google Japan Blog: 最大かつ高性能 AI モデル、Gemini を発表 - AI をすべての人にとってより役立つものに)との連携はまだなのか、入力インターフェースはあるものの、画像ファイルからのプログラムの読み取りはできなかった。Google Documentsで開く方法({村上の世間話 3 (2023/09/29)}←)も使えなくなったみたい(→{後記: マイドライブからは使えないみたい。ホームから使えた。行番号がプログラム行から離れる場合、カンマとセミコロンが抜ける場合、「I」と「1」の区別ができない場合がある}{再後記: 昨日、マイドライブから使えるようになったことを確認。})。取り合えず、上記の「フーコーの振り子」に書かれているBASICプログラムを入力すると、次のPerlプログラムが返った。

#!/usr/bin/perl
use strict;
use warnings;
my @letters = qw( L1 L2 L3 L4 );
my $permutation_count = 0;
for (my $i1 = 0; $i1 <= 3; $i1++) {
    for (my $i2 = 0; $i2 <= 3; $i2++) {
        next if $i1 == $i2;
        for (my $i3 = 0; $i3 <= 3; $i3++) {
            next if $i3 == $i1 || $i3 == $i2;
            my $i4 = 10 - ($i1 + $i2 + $i3);
            print join("", @letters[$i1], $letters[$i2], $letters[$i3], $letters[$i4]), "\n";
            $permutation_count++;
        }
    }
}
print "Total permutations: $permutation_count\n";

このままでは動かない。原因に気づくまでしばらくかかった。BASICの行100「LET I4 = 10 - (I1 + I2 + I3)」の意味を理解すれば解決する。次のようにすればよい。

#!/usr/bin/perl
use strict;
use warnings;
my @letters = qw( L1 L2 L3 L4 );
my $permutation_count = 0;
for (my $i1 = 1; $i1 <= 4; $i1++) {
    for (my $i2 = 1; $i2 <= 4; $i2++) {
        next if $i1 == $i2;
        for (my $i3 = 1; $i3 <= 4; $i3++) {
        	next if $i3 == $i1 || $i3 == $i2;
		my $i4 = 10 - ($i1 + $i2 + $i3);
		print join("", $letters[$i1-1], $letters[$i2-1], $letters[$i3-1], $letters[$i4-1]), "\n";
		$permutation_count++;
        }
    }
}
print "Total permutations: $permutation_count\n";

プログラムのデバッグは、文法エラーはインタープリタなどのエラーメッセージを見ていけば簡単にできるが、ロジックのエラーはプログラムの意味を理解していないと難しいということ。

それはともかく、フーコーの振り子については、フーコーの振り子 - Wikipediaあるいはフーコーの振り子 (小説) - Wikipediaを参照。物語の舞台は、フランス国立工芸院 - Wikipediaパリ工芸博物館 - Wikipediaに始まる。もちろん、ウンベルト・エーコ - Wikipediaも読むべきだろう。

ウンベルト・エーコ蔵書確認

../ウンベルト・エーコ蔵書確認

0241夜 『薔薇の名前』 ウンベルト・エーコ - 松岡正剛の千夜千冊の内容を確認したいところ。


更新: 2023-12-13T16:24:07+09:00

[プログラミング] 十夜一冊 第二千二百五十一夜 「フーコーの振り子」のパスワード探し - プログラムとカバラ

{12/09/2023: [プログラミング言語]十夜一冊 第二千二百五十夜 ウンベルト・エーコ著、藤村昌昭訳「フーコーの振り子」(文藝春秋、1993年、原著; 1988年)}←の続き。カバラ - Wikipedia。物語より先にプログラムの問題を片付けよう。

Bardには元のBASICプログラムを直接渡したので、Copilot/Bingにもそうしてみた。結果を正当に評価するには同じ方法で比較しないと。

use strict;
use warnings;
print "Enter four letters: ";
chomp(my $letters = <STDIN>);
my @letters = split //, $letters;
for my $i1 (0..3) {
    for my $i2 (0..3) {
        next if $i2 == $i1;
        for my $i3 (0..3) {
            next if $i3 == $i1 || $i3 == $i2;
            my $i4 = 10 - ($i1 + $i2 + $i3);
            print "$letters[$i1]$letters[$i2]$letters[$i3]$letters[$i4]\n";
        }
    }
}

anagrams on Copilot/Bing at 2023-12-11

../anagrams on Copilot/Bing at 2023-12-11

Copilot/Bingの応答は至れり尽くせり、Bardのそっけない応答をはるかに上回る。が、結果は同じ。こうなるつもりという出力が示されているだけだ。


うまく動かない原因は、最後のループを端折って、一つの計算で求めようとしていることと配列の引数が通常は0から始まること。配列の四つの引数の和は10にはならない。

anagrams Perl on Copilot/Bing at 2023-12-11

../anagrams Perl on Copilot/Bing at 2023-12-11

最後に存在しない配列を読むのでエラーになる。


同じことだが、次のように書き直す。

use strict;
use warnings;
print "Enter four letters: ";
chomp(my $letters = <STDIN>);
my @letters = split //, $letters;
for my $i1 (1..4) {
    for my $i2 (1..4) {
        next if $i2 == $i1;
        for my $i3 (1..4) {
            next if $i3 == $i1 || $i3 == $i2;
            my $i4 = 10 - ($i1 + $i2 + $i3);
            print "$letters[$i1-1]$letters[$i2-1]$letters[$i3-1]$letters[$i4-1]\n";
        }
    }
}

このプログラムが最もオリジナルのBASICプログラムの構成を踏襲している。

Revised anagrams Perl on Copilot/Bing at 2023-12-11

../Revised anagrams Perl on Copilot/Bing at 2023-12-11


もう一つの方法は、配列の引数の和を合わせて、1+2+3+4=10ではなく、0+1+2+3=6とすること。

use strict;
use warnings;
print "Enter four letters: ";
chomp(my $letters = <STDIN>);
my @letters = split //, $letters;
for my $i1 (0..3) {
    for my $i2 (0..3) {
        next if $i2 == $i1;
        for my $i3 (0..3) {
            next if $i3 == $i1 || $i3 == $i2;
            my $i4 = 6 - ($i1 + $i2 + $i3);
            print "$letters[$i1]$letters[$i2]$letters[$i3]$letters[$i4]\n";
        }
    }
}

まったく同じ結果が得られる。

待てよ、イタリア語の表記、そうだ、きっと母音も二個含まれた六文字の組み合わせから考え出したのに違いない。そうだすると、全部で七百二十通りになり、その中から三十六番目か百二十番目の組み合わせを選んだのかもしれない。私がマンションに到着したのは十一時頃だったが、今はもう一時。さあ、六文字を並び替えるプログラムを作成しなければ。すでに四文字用のものが手もとにあるのだから、少し手を加えるだけでよい。

・・・

部屋に戻り、サンドウィッチは部屋の隅に置いて、まずウィスキーを飲むことにした。それからべイシックの拡張システムのディスクを入れて六文字用のプログラムを組み立ててみたが、いつものようにエラーの連続で、完成させるのに半時間はかかってしまった。それでもやっと二時半頃にはプログラムは作動し、スクリーンに七百二十の神の名が浮かびあがった。

(ウンベルト・エーコ著、藤村昌昭訳「フーコーの振り子」、文藝春秋、1993年、64ページ)

小説の中には、さすがに6文字用のプログラムは載っていないので、おせっかいだが載せておこう。

10 REM anagrams
20 INPUT L$(1),L$(2),L$(3),L$(4),L$(5),L$(6)
30 PRINT
40 FOR I1=1 TO 6
50 FOR I2=1 TO 6
60 IF I2=I1 THEN 240
70 FOR I3=1 TO 6
80 IF I3=I1 THEN 230
90 IF I3=I2 THEN 230
100 FOR I4=1 TO 6
110 IF I4=I1 THEN 220
120 IF I4=I2 THEN 220
130 IF I4=I3 THEN 220
140 FOR I5=1 TO 6
150 IF I5=I1 THEN 210
160 IF I5=I2 THEN 210
170 IF I5=I3 THEN 210
180 IF I5=I4 THEN 210
190 LET I6 = 21 - (I1 + I2 + I3 + I4 + I5)
200 PRINT L$(I1);L$(I2);L$(I3);L$(I4);L$(I5);L$(I6)
210 NEXT I5
220 NEXT I4
230 NEXT I3
240 NEXT I2
250 NEXT I1
260 END
更新: 2023-12-13T11:49:38+09:00

[Python] クリスマスイヴのPython再入門 - Bardの「フーコーの振り子」BASIC-Python変換プログラム

{十夜一冊 第二千二百五十夜 ウンベルト・エーコ著、藤村昌昭訳「フーコーの振り子」(文藝春秋、1993年、原著; 1988年) (12/09/2023)}{十夜一冊 第二千二百五十一夜 「フーコーの振り子」のパスワード探し - プログラムとカバラ (12/11/2023)}{12/20/2023: [A.I.]Bard の新機能が日本語に対応}←の続き。ご親切にPythonプログラムも示してくれたので、確認のために調べた。動かない。

def anagrams(strings):
  """
  与えられた文字列から作成できるアナグラムをすべて出力する。
  Args:
    strings: アナグラムの元となる文字列の配列。
  Returns:
    アナグラムの配列。
  """
  anagrams = []
  for i in range(len(strings)):
    for j in range(len(strings)):
      if i != j:
        for k in range(len(strings)):
          if i != k and j != k:
            for l in range(len(strings)):
              if i != l and j != l and k != l:
                anagrams.append(''.join(strings[i:j:k:l]))
  return anagrams
strings = ['a', 'b', 'c', 'd']
print(anagrams(strings))

次のようにエラーとなる。

Python anagrams Bard code running on Windows console

../Python anagrams Bard code running on Windows console


動くように書き直す。

def anagrams(strings):
	"""
		与えられた文字列から作成できるアナグラムをすべて出力する。
		Args:
		strings: アナグラムの元となる文字列の配列。
		Returns:
		アナグラムの配列。
	"""
	anagrams = []
	for i in range(len(strings)):
		for j in range(len(strings)):
			if i != j:
				for k in range(len(strings)):
					if i != k and j != k:
						for l in range(len(strings)):
							if i != l and j != l and k != l:
								anagrams.append(strings[i] + strings[j] + strings[k] + strings[l])
	return anagrams
strings = ['a', 'b', 'c', 'd']
print(anagrams(strings))

Modified Python anagrams Bard code running on Windows console

../Modified Python anagrams Bard code running on Windows console


Pythonの場合、print文ではリスト・オブジェクトが出力されてしまう。さらに書き直す。

def anagrams(strings):
	"""
		与えられた文字列から作成できるアナグラムをすべて出力する。
		Args:
		strings: アナグラムの元となる文字列の配列。
		Returns:
		アナグラムの配列。
	"""
	import sys
	stdout = sys.stdout
	anagrams = []
	for i in range(len(strings)):
		for j in range(len(strings)):
			if i != j:
				for k in range(len(strings)):
					if i != k and j != k:
						for l in range(len(strings)):
							if i != l and j != l and k != l:
								stdout.write(strings[i] + strings[j] + strings[k] + strings[l] + '\n')
	return anagrams
strings = ['a', 'b', 'c', 'd']
anagrams(strings)

これで、出力が現実的なものとなった。

Second Modified Python anagrams Bard code running on Windows console

../Second Modified Python anagrams Bard code running on Windows console


更新: 2023-12-25T00:04:25+09:00

[季節] 世は忘年会シーズンだけど、仮想とvirtualを考える

将棋もbackspaceも忘年会シーズン。そういえば、とあるハッカーが、日本語の「仮想」は「virtual」の意味と逆になっていると言われたので、その論拠を確認した。【不思議な英単語】Virtual の本来の意味とは? ? 「仮想」と「現実」のどっち?|エイゴのタネ、ここら辺の話だが、語源まで考えると、The Virtual Architectureに詳しい。

・・・「仮想(バーチャル)」という言葉は、ラテン語で「潜在的能力」や「力」を表す「ヴィルトゥス」に由来し、それが何らかの効力や機能を発揮したり、知覚できたりした時に現実化するものをいう。ドゥルーズによれば、仮想の現実化は、可能性の実現とは異なるということだ。可能性の実現が、何かを達成するまでのプロセス、すなわち、実存するモデルの再現であるのに対して、仮想の現実化には「終わり」というものがない。仮想が現実化するとどんなものになるかは、数限りなく想定できる。つまり、仮想とは、無限の可能性をはらみ、どこまでも伸びていく直線のようなものである。こう考えると、「仮想」は、従来から言われてきたように現実に代わるものという意味に止まらず、全く新しい概念を表す可能性をはらんだ言葉だということが分かるだろう。この意味で、仮想は現実の代用ではなく、現実と共存し、さらには現実に挑むものでなければならない。仮想とは新しい現実世界を創造する技術なのである。・・・

(The Virtual ArchitectureThe Virtual Architecture 「仮想の創造」 Foreign office architects ltd. Alejandro Zaera-Polo & Farshid Moussavi)

なるほど、建築家の発想なのか、ありそうな話。

人それぞれの現実は仮想であるということである。そんなこともこの日記のどこかに書いてあるかもしれない。

更新: 2023-12-31T11:19:46+09:00

[季節] 大晦日、ゆく年くる年

紅白が終わり、新年を迎える。

今年を振り返るのは新年になってから・・・