エレファント・ビジュアライザー調査記録

ビジュアルプログラミングで数式の変形を表すことを考えていくブロクです。

2022-01-01から1年間の記事一覧

関数プログラミングと無限論理多項式(20)

Go の例(3) Go のゴルーチンを使わない例も同様に修正します。NumbersServer 構造体の GetNumbers メソッドで計算をしないようにします。コンストラクターで current_numbers に設定する必要はないので削除します。 type NumbersServer struct { current_num…

関数プログラミングと無限論理多項式(19)

Python の例(3) Python の例も同様に修正します。NumbersServer クラスの GetNumbers メソッドでは計算の処理をしないようにして、コンストラクターで最初の値を生成するようにします。 class NumbersServer: def __init__(self): number = LongDecimal([]) …

関数プログラミングと無限論理多項式(18)

ブラウザーで計算する場合の仕様 「ブラウザーで計算しサーバーから1回ずつ値を取り出す場合」では、イテレーターやクロージャーのような「参照透過性なし」の関数プログラミング的機能、またはオブジェクト指向のオブジェクトを使ってサーバー側のデータを…

関数プログラミングと無限論理多項式(17)

F# の例(3) F# 版も C# 版と同様に修正します。NumbersServer クラスの GetNumbers メソッドを値を返すだけに変更し、コンストラクターで generator_server.MoveNext() を1回呼び出します。 type NumbersServer() = let mutable current_numbers: Numbers = …

関数プログラミングと無限論理多項式(16)

JavaScript の例(4) (TypeScript) TypeScript 版も C# 版と同様に修正します。Take 関数も間違っていたので修正します。NumbersServer クラスの GetNumbers メソッドを以下のように値を返すだけに変更します。 GetNumbers(): Numbers { return this.current_…

関数プログラミングと無限論理多項式(15)

C# の例(6) 「ブラウザーで計算する場合」でサーバー側でも計算していましたが、これは必要ないので修正します。NumbersServer クラスの GetNumbers メソッドを、以下のように値を返すだけに変更します。 private Numbers GetNumbers() { return generator_s…

関数プログラミングと無限論理多項式(14)

Go の例(2) (ゴルーチン) 次にゴルーチンを使ったものを考えます。GenerateDecimal をゴルーチンを使って以下のように書き直します。これはクロージャーを使っているのでクロージャーの代わりにゴルーチンを使っているわけではありません。 func (xyz *Numbe…

関数プログラミングと無限論理多項式(13)

Go の例(1) Go ではクロージャーで実装しました。イテレーターを表すもの(構造体)などを型ごとに複数作っているので長くなります。Goはこのようなプログラムには向いていないようです。xyz は構造体の自分自身を表す名前なのですが self などは使えないよう…

関数プログラミングと無限論理多項式(12)

F# の例(2) F# もコンストラクターを3個に削減しました。Seq.unfold (iterate に相当)を使っています。 let Align0<'T> (xs: 'T list) (len: int) (z: 'T): 'T list = [ for xd in xs do yield xd for i in xs.Length .. len - 1 do yield z ] let ZipWith0<…

関数プログラミングと無限論理多項式(11)

JavaScript の例(3) (TypeScript) コンストラクターを1個にしました。イテレーターを保持する変数はやはりクラスの中には書けません。これはどうすれば良いのかわかりません。Visual Studioでこれを実行すると出力が「出力」の領域に出ないので出力がよくわ…

関数プログラミングと無限論理多項式(10)

C# の例(5) 次にイテレーターとなるクラスを(IEnumerable インターフェイスとは関係なく)作って実装します。イテレーターに対する入力もできるようにします。 サーバーで無限に計算する場合 NumbersGenerator クラスの GenerateDecimal と コンストラクター …

関数プログラミングと無限論理多項式(9)

C# の例(4) このあたりから本題に入ります。イテレーターの yield のような機能がないプログラミング言語用に、クロージャーを使ってイテレーターを実装します。C# ではデリゲートというものを使うのですが、デリゲートという用語の定義はいろいろと細かいこ…

関数プログラミングと無限論理多項式(8)

C# の例(3) C#版もコンストラクターなどを書き直したので再びここに公開します。C#版も最初は移植のためにコンストラクターを1個にしようとしていたのですが、非常に見にくくなってしまったのでコンストラクターが増えてしまいました。C#ではリストが [a] の…

関数プログラミングと無限論理多項式(7)

Python の例(2) F# のコードから移植したので少し間違っているところがありましたので修正します。そのほか移植したときにわかりやすいようにコンストラクターを変更しました。また、メソッド名も少し変更しました。 Python のコード def Align0(xs, leng, z…

関数プログラミングと無限論理多項式(6)

Python の例 PythonはVisual Studioからインストールしました。PythonのイテレーターはC#と同様なので、だいたい同じように書けました。next は next(イテレーターの式) のように書かないといけません。この書き方がバージョンによって違うようでウェブに書…

関数プログラミングと無限論理多項式(5)

F# の例(1) F# で動作するようにすることはできましたが、まだよくわからないところがあります。「エレファントな群とリー代数」では「項書き換え」の「一階の項」を「一般マグマの多項式」として多項式のように扱う方法について考えました。論理プログラミ…

関数プログラミングと無限論理多項式(4)

JavaScript の例(2) (TypeScript) この記事の目的は、サーバーで無限に実行されているプログラムとブラウザーで実行されるプログラムの組み合わせがあるとき、ブラウザー側のプログラムを更新することは、サーバー側のプログラムを同じように更新することと…

関数プログラミングと無限論理多項式(3)

C# の例(2) LongDecimal クラスの説明 LongDecimal は小数点以下の任意の桁数まで計算できるクラスです。小数点より上の整数の部分は一桁しか計算できないので、このままでは普通に使うことはできませんが、ここではこれでも大丈夫です。F#に移植するため、…

関数プログラミングと無限論理多項式(2)

今回は3の平方根を1桁ずつ計算するC#の例をJavaScriptで書き直したものを考えます。 JavaScript の例 以下のコードのクラス Numbers の関数 GetNextDecimalDigit() で1桁分の処理を行っています。LongDecimal は小数点以下の任意の桁数を計算することができ…

関数プログラミングと無限論理多項式(1)

この記事では、サーバーで無限に実行されるプログラムとブラウザーで実行されるプログラムを組み合わせたものを記述する方法について考えていきます。まずC#のイテレーターで考えてみます。今後はHaskellなどのプログラミング言語とも比較していきたいと思い…