すべてのコードを一連のMap / Filter / Reduce操作として表現できますか?


16

私は最近、大量のコードをリファクタリングし、それらをLinqクエリに置き換えています。

言語バイアスの除去-Linqは、基本的に一連のデータを操作するMap / FilterおよびReduce操作のセットです。

これは、理論的にこれをどこまで引き継ぐことができるかを考えさせられました。コードベース全体を一連の(または単一の)Map / FilterおよびReduce操作に書き換えることができますか?

残念なことに、私は有用なことをするために報酬を受け取っているので、これ以上実験することはできませんでしたが、そのように再構築できないコード構造は考えられません。副作用コードは、モナドを介して処理できます。出力でさえ、基本的にメモリアドレスをスクリーンアドレスにマッピングします。

(理論的に)Linqクエリとして書き直せないものはありますか?


:木はここを参照してくださいstackoverflow.com/questions/250377/...
blueberryfields

チューリングの完了を保証するには、「reduce」で十分だといつも思っていました(マップとフィルターはreduce操作として実装できますか?)-少なくとも、reduceに相当する関数型言語です。Linqの実装が機能的な実装にどれだけ近いかを確認するには、Linqについて十分に知りません。
ブルーベリーフィールズ

1
私にはわかりませんが、大まかな経験則では、すべてのコードを記述することを検討している人は、チューリング完全であることが判明します。しかし、その結果は、チューリングが完全であることはあまりエキサイティングではないということです。
psr

1
私はpsrに同意します。この質問に対する有効な答えは、チューリングの完全性に取り組む必要があると思います。証明は、これらの操作のみを使用してチューリングマシンを実装しようとする場合があります。
ロブ

アイドルの考え:のようなナンセンスを許可したとしてもmy_list.map(_ignored => a copy of my_list)、そのようなプログラムのスペース使用は(プログラムの長さに応じて)ある多項式によって制限されているようです。その場合、そのような言語は確かにPSPACEにない問題を計算できませんでした。ただし、PSPACEの多くの問題は扱いにくいと考えられているため、より大きなクラスは言うまでもなく、これは非常に深刻な制限ではないかもしれません。

回答:


1

関数型プログラミングと呼ばれ、多くの人が基本的な概念であると考えています。Joel On Softwareの良い紹介です。より技術的な答えは「いいえ」です。SKI計算では答えることができない、コンピューターの質問を(明確に定義された方法で)行う方法は現在知られていません。


1
ありますはるかに多くの関数型プログラミングの機能よりもmapfilterreduce(私たちはチューリング完全性を無視して、実用的なFPの言語を使用している場合、これは3回行きます)。実際、それらはたまたま一般的であり、したがって一般的には有用ですが、実際には関数型プログラミングの非常に単純なアプリケーションです。ベアミニマムラムダ計算は、他の多くの中でこれらの関数を定義できますが、その逆ではありません。

「ここにJoel On Softwareの良い紹介があります」-FortranとBasicを混同することがあるので、他の事実をあまり信用しません。
quant_dev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.