tail-recursion

    8

    2答えて

    たとえば、次の関数はアキュムレータを持たないため、まだテール再帰的ですか? belong:: (Ord a) => a -> [a] -> Bool belong a [] = False belong a (h:t) | a == h = True | otherwise = belong a t 機能のすべての計算は、再帰呼び出しの前に処理され、尾を再帰的とみなされ

    7

    3答えて

    私はCommon Lisp関数(私はまだ初心者です)のパフォーマンスを理解する上で問題があります。私はこの関数の2つのバージョンを持っています。これは与えられた最大の整数の合計を単に計算します。n 非末尾再帰バージョン: (defun addup3 (n) (if (= n 0) 0 (+ n (addup (- n 1))))) 末尾再帰バージョン: (defu

    10

    1答えて

    スカラでカスタムオブジェクトのツリーを作成していますが、挿入メソッドがテール再帰的ではないためスタックオーバーフローをスローします。しかし、私はそれを尾を再帰的にする方法を考え出すことはできません。関連する例「アキュムレータ」の変数を使用していますが、整数に掛け合わせたり上書きしたりすることができます。ツリーに適応するのに問題があります。ここで私が持っているものです。 私の木の基礎: abstra

    8

    1答えて

    私はF#でいくつかのコードを持っています.netではうまく動作しますが、Monoではスタックをオーバーフローさせます。関連する問題は、おそらくそれが利用可能なスタックスペースがなくなる(System.Threading.Thread(ts、1000000000)で始まる)ようになると思われることです。限り、私が言うことができる限り、それが死ぬ折り畳みはテール再帰的であり、スタックトレースはあたかも

    12

    1答えて

    私はcontinuations/CPSを理解しようとしていました。最終的な計算を呼び出すリストの終わりに達すると、遅延計算を構築します。 私が理解できないのは、例1の単純なアプローチのようにネストされた関数を構築するのと類似していると思われる場合、CPSがスタックオーバーフローを防ぐ理由です。長いポストを申し訳ありませんが、基礎から)うまくいかない:だから : let list1 = [1;2;3

    7

    3答えて

    私は運動 let lastchar (s:string) = s.Substring(s.Length-1, 1) let lastchar_substring (s:string) len = s.Substring(len-1, 1) let rec levdist (sa:string) (sb:string) alen blen = match alen, blen with

    7

    2答えて

    Linuxでgcc 4.4.5、Mac OSX(Xcode 4.2.1)でgcc-llvm、thisで次のコードを試しました。以下は関連する関数のソースと生成された逆アセンブリです。 #include <stdio.h> __attribute__((noinline)) static void g(long num) { long m, n; printf("%p

    7

    1答えて

    検索しようとしましたが、gccが末尾再帰を最適化するために関数の必要条件は何ですか?最も重要なケースを含む参照やリストはありますか?これはバージョン固有のものなので、私の興味は4.6.3以上のバージョンです(新しい方が良いでしょう)。しかし、実際には、具体的な参考資料は非常に高く評価されます。 ありがとうございます!

    5

    1答えて

    私の友人は、特に顔が単なるシーケンスではない場合に、最も均一に分布した顔を持つものを見つけるために、ダイの顔のランダムな配列を比較するプログラムを書いています。 私は自分のプログラムをhaskellに翻訳しました。なぜなら、私は、誰かの耳に耳障りなhaskellがあるかどうかを話す理由を探していたからです。しかし、私はhaskellにあまり堪能ではありません(これは永遠にこれを書いていて、数回の巨

    24

    2答えて

    仕様でテールコールの最適化を行っている真のRAII言語は考えられませんが、実装固有の最適化として多くのC++実装で可能です。 これが行うこれらの実装のための質問を提起:再帰呼び出しをしなければならないことを、別ガベージコレクションルーチンによってないデストラクタが自動変数のスコープの終わりに呼び出されることを考えると、それはTCOの制約に違反しません関数の最後にある最後の命令ですか?例えば : -