新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

Whitespace曲りなりに実行できました。

2021-12-04 16:01:27 | Lisp

 試行錯誤でしたが、なんとか結果は出ました。WhitespaceはSchemeで開発されたプログラム言語ですか?fact.wsはそれを使ったアプリということなんですかね?どっちもチンプンカンプンですが。


コメント (11)    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Whitespaceとは?ShemeによるP... | トップ | 円の面積からPIEを出してみる »
最新の画像もっと見る

11 コメント

コメント日が  古い順  |   新しい順
Whitespaceとは (cametan_42)
2021-12-04 17:57:56
> WhitespaceはSchemeで開発されたプログラム言語ですか?

原作はHaskellで書かれたプログラミング言語です。

Whitespace:
https://web.archive.org/web/20150618184706/http://compsoc.dur.ac.uk/whitespace/tutorial.php

それをRacketに移植しただけ、ですね。

> fact.wsはそれを使ったアプリということなんですかね?

アプリと言うより、fact.wsはWhitespace言語で書かれたプログラムです。
スペース、タブ、改行文字だけで書かれたプログラムです(だから「空白」を意味するWhitespaceと言う名前がついている)。

> どっちもチンプンカンプンですが。

当然ですね。
一種の冗談プログラミング言語で、このテのブツは「難解プログラミング言語」と呼ばれています。

難解プログラミング言語:
https://ja.wikipedia.org/wiki/%E9%9B%A3%E8%A7%A3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E

実用性は全くありません(笑)。
ただ、ハッカー連中の腕試しとしての「おもちゃ」としての性質が強い。
フツーのプログラミング言語を作るのは厄介ですが、この手のプログラミング言語は「プログラミング言語の作り方」の初歩的な知識のみで制作出来る事もあって、たくさん作られてるんですよ。
一般に、「マトモなプログラミング言語」を作ろうとすれば、これは手間なんですが、逆に「難解プログラミング言語」を作ろうとするのは前者に比べると比較的ラクなんです(プログラムを作る側がラクだと作品が難解になる、と言う反比例の関係が見られる・笑)。
トーカナイザ(字句解析器)、パーザ(構文解析器)、そしてコンピュータの仕組みを知るために自作してみるのは、結構良い経験にはなりますよ。
cametan_42さん、コメントありがとうございます (isam)
2021-12-04 20:04:41
 ideone_s043hbがfact.wsを解釈するインタープリタというわけでもないですか?
 fact.wsがideone_s043hbを使って、サブルーチンみたいな、実行する。に近いんですかね。例えば素数のジェネレータみたいのは、作れるんですかね?
 難解プログラミング言語なので、作れるんですが、面倒ということでしょうか。
仮想マシン(vm)とは (cametan_42)
2021-12-04 20:24:25
> ideone_s043hbがfact.wsを解釈するインタープリタというわけでもないですか?

そう考えて良いです。
と言うか、僕のブログの方にも書きましたが、コンピュータの動作そのものが原理的にはインタプリタそのものです。
従って、仮想マシンもインタプリタです。
Javaなんかの仮想マシン(JVM)もインタプリタですね。

> 例えば素数のジェネレータみたいのは、作れるんですかね?
> 難解プログラミング言語なので、作れるんですが、面倒ということでしょうか。

作れるでしょうね。
ただ、isamさんが想像した通り、クソ面倒でしょう(笑)。
僕もやりたくないです(笑)。
事実上、殆ど機械語でコーディングするようなモノですから。
面倒なんですね (isam)
2021-12-05 07:33:44
 cametan_42さんが面倒で、やりたくないというのであれば、自分に出来るわけないので、やらない方が賢明でしょう。
 コンピュータそのものが、先達が作ったものは、ありがたく利用する文化なので、それに従ったほうが正解なんですかね。
 昔はMASMとか見たことがありましたが、今も使ってるんでしょうか?
多分作者も面倒がってます(笑)。 (cametan_42)
2021-12-06 03:34:03
> 自分に出来るわけないので、やらない方が賢明でしょう。

多分、作者もやってないんじゃないかなぁ(笑)。
恐らく逆アセンブラみたいなの作ってるんじゃないかしら。
それはWhitespaceのWebページにはおいてなかったですけどね。

> 昔はMASMとか見たことがありましたが、今も使ってるんでしょうか?

いまは使ってないんじゃないですか?DOS時代のモノですしね。
作者も面倒ですか? (isam)
2021-12-06 08:28:14
 よくプログラミングの解説本には、機械語と人間をつなぐものが、プログラミン言語でMASMみたいなものから昔で言えばFortranなどがあって、低次元の言語から高度な言語まで有る、とか書いてます。
 最近の言語はexeファイルを作らない、仮想言語みたいなんですかね。但し、CとC++はexeファイルを作りますが、それでもインタープリタと言えますか?
最近の言語 (cametan_42)
2021-12-06 16:11:18
> 最近の言語はexeファイルを作らない、仮想言語みたいなんですかね。

そうですね。仮想マシン上で動く言語、の方が、MSのC#を含み増えてきてるかな。
結局、

> 低次元の言語から高度な言語まで有る

ってのはある意味変わってきてて、「言語」じゃなくって「レイヤー」になってきてる、って事ですね。低レベルから低レイヤー、その上に順次またレイヤーが重なっていく、って方が事実に近くなってきてるかも。

> 但し、CとC++はexeファイルを作りますが、それでもインタープリタと言えますか?

逆です。コンパイラ、とはインタプリタ上で動くコードを吐き出す為のモノだ、って考えた方が事実に近い。
CPUは原理的にはハードウェア・インタプリタなんです。
そのハードウェア・インタプリタ上で動くコードに変換する事を事実上「コンパイル」と言う。
Java仮想マシン上で動くコードに変換するのを「コンパイル」と言う。
Python仮想マシン上で動くコードに変換するのを「コンパイル」と言う。

一方、そのターゲット上のマシン(仮想であれ何であれ)での実行自体は、動作的にはインタプリタである、って事です。
cametan_42さん、コメントありがとうございます (isam)
2021-12-06 22:03:42
 コンパイラとは、インタープリタが実行できるコードを出力するもの、なんですか?
 昔はBASICはインタープリタでFortranなどはコンパイラと思ってました。
 話は変わって、少し前ですがNHKBSで将棋のプロ棋士がボナンザとか言うコンピュータに負けたとかありました。最近の棋士はソフトを活用してるようです、藤井三冠ですか?も活用してるようですが、どんなソフトですかね。AIなんですか?天才が作ったものでしょうから、分かるはずはないのですが、自分には。
cametan_42さんは将棋も興味がありそうですので、質問してみました。
 自分は将棋はもとより、勝負事は全く性に合いませんので、出来ません。
「事実上」と言う事です。 (cametan_42)
2021-12-07 00:03:30
> コンパイラとは、インタープリタが実行できるコードを出力するもの、なんですか?

事実上そうですね。
プログラミング言語のインタプリタもCPUも「逐次実行」が基本です。
前者は入力を一行一行実行する。後者はバイト毎に実行する。
CPUも「ある纏めた命令を一気に」実行は出来ないのです。仕組みはソフトウェアのインタプリタに近い。
結局、「なんかのインタプリタが解釈可能な状態にファイルを変換すること」がコンパイラがやることなんです。
それで言うと、例えばC言語のファイルをPascalのソースコードに「一気に翻訳する」事もコンパイルです。
コンパイル = 翻訳、と捉えるのが事実に適合してますね。

> 昔はBASICはインタープリタでFortranなどはコンパイラと思ってました。

実際はそういう区分けは意味がない、ってのは何度か指摘してますね。
BASICは古い時代でもコンパイラがありました。
結局、PC環境ではあまりメジャーじゃなかった、ってだけです。

言語をインタプリタ型、コンパイラ型、って分けるのは無意味ですね。殆どの言語仕様には「インタプリタにしろ」とか「コンパイラにしろ」とは書いてません。
例外はANSI Common Lispくらいですかねぇ。Common Lispは言語仕様でコンパイラが規定されています。

> cametan_42さんは将棋も興味がありそうですので、質問してみました。

いや、僕も将棋は全く、ですねぇ。
でも統計を使ったAI、今で言うと機械学習ソフトの一種でしょうね。
Quick BASICと言うのがありました (isam)
2021-12-07 22:39:23
 あまり昔のことで、はっきりしませんが、割とよくできてたように思います。今のIDE、そのままだったと思います。 
 昔で言う、コンパイラだっと思います。

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

Lisp」カテゴリの最新記事