問題タブ [seasoned-schemer]
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.
scheme - スキーム内のプロシージャの以前の戻り値をキャッシュする
「TheSeasonedSchemer」の第16章で、作成者は再帰的プロシージャ「depth」を定義します。これは、n個のリストにネストされたピザを返します。たとえば、(depth 3)is(((pizza)))。次に、setを使用して戻り値をキャッシュする「depthM」として改善します。リスト内のNsとRsは、一緒にルックアップテーブルを形成するため、前に見た戻り値に達した場合に、最後まで繰り返す必要はありません。たとえば、すでに計算した場合(depthM 8)、後で計算するときに(depthM 9)、(depthM 0)まで繰り返すのではなく、(depthM 8)の戻り値を検索し、nullに変換します。 。
しかし、その後、プロシージャ内でNとRを移動し、「let」を使用してnullに初期化します。なぜこれは戻り値をキャッシュするという点を完全に打ち負かさないのですか?少し実験したところ、「depthM」を呼び出すたびにNとRが再初期化されているようです。
私は彼らの主張を誤解していますか?
私の質問は本当にこれだと思います:「状態」変数を使ってPerl 5.10でできるように、字句スコープの変数がプロシージャの呼び出しの間に値を保持する方法はありますか?
scheme - 2つのペア(短所セル)が同じかどうかをテストする
Seasoned Schemerの150ページにある次の関数は、各リストのcdrを変更し、変更が両方に影響したかどうかを確認することで、2つのリストが同じIDを持っている(つまり同じメモリを占有している)かどうかを確認します。
今、私a_list
が次のように定義すると:
と評価する
関数は#fを返し、デバッガー(Dr. Racket)は、これら2つのリスト(2番目の引数は最初の引数の適切なサブセットであるためメンバーのほとんどを共有する必要があります)が実際には異なるコピーを持っていることを確認します同じメンバー。これはどうして可能ですか?!
このアイデアに少しひねりを加えるには:
今a_list
は循環的です。この関数を使用してテストすると、2つの引数、つまりとsame?
が同相の場合にのみ#tが登録されます。 (same? a_list a_list)
(same? a_list (cdddr a_list))
[編集回答は、承認された投稿のコメントチェーンの一番下にあります]
scheme - 「TheSeasonedSchemer」の長さ関数
私はTheSeasonedSchemerを読んでいて、長さ関数のこの定義に出くわしました
後で彼らは言う:
(L(lambda(arg)(h arg)))の値は何ですか?機能です
私はこれを完全には理解していないと思います。私たちは自分たちをエクササイズとして定義することになっていると思います。私はletrecを使用して長さの定義内にLの定義を書きました。これが私が書いたものです:
したがって、Lは引数として関数を取り、値としてリストを引数として取り、リストに対して再帰を実行する別の関数を返します。私の解釈は正しいですか、それとも絶望的に間違っていますか?とにかく定義は機能します
scheme - ベテランのスキーマーの get-first、get-next、waddle 関数
「The Seasoned Schemer」という本に精通していない人にとっては、get-first
、get-next
、および(最後の 2 つはここでは定義されていません) は、葉のみを生成するために渡されたツリーを反復処理するコルーチンwaddle
を明らかにモデル化するための手順です。最後から 2 番目の再エントリでの yield の直前に、純粋な値のみを返す場所に再エントリ ポイントを設定します。つまり、yield の代わりにisの実際の値をずっと純粋な機能。 waddle
waddle
'()
'()
waddle
'()
get-first
これを念頭に置いて、何が設定されているかを見ることができます... waddle
"実際に" を返すとき、それはincall/cc
の中にあり、その値は(そして、これは最後の繰り返しでに戻ることを意図しています。したがって、の「実際の」リターンを行うのは) です。 get-first
(leave (quote ()))
get-first
leave
get-next
get-next
'()
では、なぜ 2 番目のバージョンは同等ではないのですか?waddle
の値は'()
の引数になります。leave
functional-programming - ベテランSchemer、letcc、guile
これに関するいくつかの質問は、letcc
TheSeasonedSchemerで使用されています。
私は何
letcc
が達成されるかを理解していると思います、そしてそれは基本的にルビー(そして一見CL)のようなものです、それは基本的catch
にthrow
名前が何であるかを呼び出すことによってコードのブロック全体を短くすることができることを意味しますletcc
。これは、この短いシリーズの本で出会った中で最も「機能的」でないもののように感じます。優れた機能的なスタイルを学びたいので、使用するのを少しためらうように感じます。私は誤解しているだけletcc
ですか、それとも実際には関数型プログラミングの概念ではなく、パフォーマンスを向上させるためだけに存在しているのでしょうか?あるルーチンの途中で、突然コード内の別のポイントに到達する可能性があるという全体的な考えは、少し間違っているように感じます...プログラムフローのためにJavaでtry/catchを悪用するようなものです。letcc
OS Xにインストールしたバージョンのguile(1.8.7)には存在しないようです。guileで探す必要のある別の名前はありますか?letcc
Javaでのtry/catch、またはrubyでのcatch / throw(非ルビー主義者にとっては例外処理ではありません)と比較して誤解している場合、機能レベルでどのように正確に機能しますか?結局のところ、それが機能的であると私に納得させる、より長く、より複雑な方法で表現することができますか?
scheme - Racket に「try」のような機能はありますか
今、私はThe Seasoned Schemer という本を見て、schemer に傾倒しています。ラケットでコードを書きましたが、 を使用するtry
と、スキーマにはこのメソッドまたはマクロがありませんでした。そして、expand: unbound identifier in module in: try を報告しました。以下のコード: (89ページ)
ラケットのドキュメントを検索しましたが、同様の機能は見つかりませんでした。
では、「try」のような機能があるかどうか、誰が知っているでしょうか?
model - 長さと頻度が等しくない 2 つの時系列による予測
私は2つの時系列を持っています。1) 2013 年から 2016 年までの毎月の家庭用天然ガス需要 2) 2013 年から 2017 年 3 月 31 日までの毎日の平均気温
2017 年 1 月から 2017 年 4 月までの期間の住宅用天然ガス需要の月次および日次予測を提供する必要があります。
NaN と Na を扱うデータを準備した後、気温を月平均気温に変換する必要があります。次に、モデルを構築して、需要の将来の価値を見積もる必要があります。
私はRと計量経済学の初心者です。
月平均気温時系列の毎日平均気温時系列を変換するために、R でどの変換を使用できますか?
ベクトル自己相関は季節データの適切なモデルですか? 将来の需要を予測するには、気温と古い需要の値を使用する必要があります。