11

Haskellで興味深いライブラリがScrap Your Boilerplateと呼ばれ、paper by Simon Peyton Jonesに基づいています。これは、関数型プログラミングで大きく深くネストされたデータ構造を更新するコードを書くのに有効な方法です言語。Haskellの "Scrap Your Boilerplate"のClojure相当

潜在的に大規模で複雑な会社のデータ構造内のすべての人に給与を実質的に一定割合k増​​加させるものです。

Clojureに同じ種類のプログラミングスタイルを実現するための同等のライブラリまたはアプローチはありますか?

例えば、どのように私は上記の使用例のClojureの同等物を書くことができます:

(defn increase [company k] 
    (everywhere-in company (transform-map-values :salary #(* % (+ 1 k)))) 
+2

SYB論文は、(別の)共同著者のJoost Visserと共にHaskellにStrategoを組み込むことについての共同著者RalfLämmelの研究の続きであった。 Clojureのネストされた構造を更新するには、SYBの「トラバーサルコントロール」側がそのデータ型のジェネリックス側よりも必要なので、ClojureにStrategoを埋め込んでいるかどうかを質問するために質問を広げることができます。私はClojureとウェブ検索のビットを知らない誰もこれをまだ行っていないことを示唆しているようだ。 Schemeには、確かにSYBよりも移植が容易なStratego traversalsの埋め込みがあります。私は自分自身で作成しました。 –

+2

私はSYBを知らないが、[clojure.walk](http://richhickey.github.com/clojure/clojure.walk-api.html)があなたが探しているものでしょうか? –

答えて

4

のClojureでこれに最も近いが、おそらく機能(連想で、更新中、dissoc「の」あります-に)。

これらの機能を使用すると、深く入れ子にして、クロージャーを正確に変更できます。 Haskellではこれらの関数と同等のものはありません。なぜなら、それらは動的な型定義に大きく依存しているからです。

1

この質問が最初に尋ねられたとき、彼らは周りにいませんでしたが、私はtransducersが同様のスタイルのプログラミングを可能にすると信じています。基本的に変換可能プロセスは、ある種の機能を実装しており、変換器は、変換可能なプロセスを通過することができます。