問題タブ [letrec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
16 に答える
3368 参照

recursion - *再帰的*関数リテラル/無名関数をサポートする言語は?

最近では、かなりの数の主流言語が関数リテラルをサポートしているようです。無名関数とも呼ばれますが、名前があっても構いません。重要なことは、関数リテラルは、他の場所でまだ定義されていない関数を生成する式であるため、たとえば C では&printfカウントされないということです。

追加する編集:本物の関数リテラル式がある場合は、それを関数に渡すか、すぐに引数に適用<exp>できるはずです。.f(<exp>)<exp>(5)

recursiveである関数リテラルを記述できる言語はどれか知りたいです。ウィキペディアの「匿名再帰」の記事には、プログラミングの例はありません。

再帰的階乗関数を例として使用しましょう。

ここに私が知っているものがあります:

  • JavaScript / ECMAScript でそれを行うことができますcallee:

    /li>
  • を使用する言語では簡単ですletrec。たとえば、Haskell (これはそれを呼び出しますlet):

    let fac x = if x<2 then 1 else fac (x-1) * x in fac

    LispとSchemeにも同等のものがあります。のバインディングはfac式に対してローカルであるため、式全体が実際には無名関数であることに注意してください。

他にもありますか?

0 投票する
3 に答える
7593 参照

functional-programming - letrecの利点は何ですか?

「TheSeasonedSchemer」を読みながら、私はについて学び始めましたletrec。私はそれが何をするのかを理解しています(Y-Combinatorで複製できます)が、本はdefine静的なままの引数で動作するすでにd関数を繰り返す代わりにそれを使用しています。

defineそれ自体で繰り返されるd関数を使用する古い関数の例(特別なことは何もありません):

同じ関数の例ですが、以下を使用しletrecます。

少し長くて読みにくいことを除けば、なぜ彼らがletrecを使用するために本の関数を書き直しているのかわかりません。あなたがそれを渡し続けないので、このように静的変数を繰り返すときの速度の向上はありますか?

これは、引数が静的なままであるが、1つの引数が削減されている関数(リストの要素を繰り返すなど)の標準的な方法ですか?

より経験豊富なSchemers/LISPersからのいくつかの入力が役立ちます!

0 投票する
4 に答える
18770 参照

haskell - fix はどのように使用し、どのように機能しますか?

のドキュメンテーションに少し戸惑ったのでfix(現在は何をすべきかは理解できたと思いますが)、ソース コードを調べました。それは私をもっと混乱させました:

これはどのくらい正確に固定点を返しますか?

コマンドラインで試してみることにしました:

そして、それはそこにぶら下がっています。公平を期すために、これは私の古いMacbookにあり、少し遅いです。ただし、この関数は、id に渡されたものはすべて同じ結果を返すため、計算コストが高すぎることはありません(言うまでもなく、CPU 時間を消費しません)。私は何を間違っていますか?

0 投票する
1 に答える
376 参照

recursion - スキーム: letrec で定義されたこの再帰関数の評価が失敗するのはなぜですか?

私はSchemeでばかげたletrecを書いています(DrRacket Pretty Big):

構文チェックは問題ありませんでしたが、実行すると次のように失敗します。

デバッガーは、障害の時点で次のように言います。

何が足りないのか教えてください。修正もいいでしょうが、必要ではありませんが、定義しないでください。

ありがとうございました!

0 投票する
2 に答える
216 参照

scheme - 'letrec' をパターンマッチする方法

match-lambda を使用して letrec への一致呼び出しをパターン化しようとしています。このパターンは次のように私には思えます:

次の形式の呼び出しに一致する必要があります。

しかし、もちろん、これは機能しません。

アドバイスをいただければ幸いです。

0 投票する
2 に答える
1099 参照

haskell - 不動点を計算する関数の変換

反復の観点から不動点を計算する関数があります。

これから次のように抽象化できることに注意してください。

この関数は修正の観点から書くことができますか?このスキームから修正されたものへの変換があるはずのようですが、私にはわかりません。

0 投票する
2 に答える
1804 参照

variables - 「set!」を使わずに「letrec」を実装するにはどうすればよいですか?

を使用せずにどのletrecように実装できますset!か?

set!これは命令型プログラミング構造であり、それを使用すると関数型プログラミングの利点が失われるように私には思えます。

0 投票する
1 に答える
794 参照

scala - Scalaのletrec? (「結び目を作る」ための不変の方法)

次のようなばかげた小さなケース クラスがあるとします。

is 、 is 、isなどab不変に定義するにはどうすればよいですか? scala は「結び目を作る」方法を提供していますか? 私はこのようなことをしたいと思います:a.otherbb.othera


可能性

Haskell では、次のようにします。

aおよびへのバインディングがb同じlet式に含まれている場所、または最上位にある場所。

または、Haskell の自動 letrec 機能を悪用せずに:

遅延パターン に注意してください。これは~(a', b')重要です。

0 投票する
2 に答える
1976 参照

variables - ローカルバインディングを作成するための「let」または「letrec」と「define」の違いは何ですか?

違いがわかりません(不自然な例で申し訳ありません):

私が知る限り、それらは両方とも新しいスコープを作成し、そのスコープ内で相互に参照する 4 つのローカル変数を作成し、本体を評価して返します。

ここで何か不足していますか、それともスコープ付きsletrecと同義ですか?define

これは実装に依存する可能性があることを知っています。Lips の基礎を理解しようとしています。

0 投票する
1 に答える
230 参照

haskell - シャドウイング`let`バインディングを使用するこのコードがハングするのはなぜですか?

このコードの実行:

通訳で:

CPU使用率がほとんどない状態でハングします。どうしてこれなの?期待していj = 16ました。