[解決済み] Schemeでモジュロと余りはどのように機能するのでしょうか?
2022-02-14 11:28:38
質問
R5RSの仕様書を読んでいて と表示されます。 :
(modulo 13 4) ===> 1
(remainder 13 4) ===> 1
(modulo -13 4) ===> 3
(remainder -13 4) ===> -1
(modulo 13 -4) ===> -3
(remainder 13 -4) ===> 1
(modulo -13 -4) ===> -1
(remainder -13 -4) ===> -1
(remainder -13 -4.0) ===> -1.0 ; inexact
これは正しいのでしょうか?moduloとreminderはマイナス記号が違うだけだと思っていました。そして、ここでは次のように表示されています。
(modulo -13 4)
は3を返すべきところ、JavaScriptでは1を返しています。
モジュロと余りを計算するための適切なアルゴリズムは何ですか?Scheme in JavaScriptの処理に必要なんです。
このコードは クオラ .
function modulo(num1, num2) {
if (num2 === 0 || isNaN(num1) || isNaN(num2)) {
return NaN;
}
var isPositive = num1 >= 0;
num1 = Math.abs(num1);
num2 = Math.abs(num2);
while (num1 >= num2) {
num1 = num1 - num2;
}
return isPositive ? num1 : -num1;
}
を返しますが、R5RS仕様のようにうまくいきません。
-1
に対して
modulo(-13, 4)
. また、私はJavaScriptの
%
と同じです。
remainder
. この2つの関数をJavaScriptで、あるいはSchemeで実装するにはどうしたらよいでしょうか。
私の正確な質問は、両方の関数のアルゴリズムがどのように見えるべきか、またはそれらを両方計算するJavaScriptのコードがどのように見えるべきか、ということです。
どのように解決するのですか?
もし誰かが興味を持っているなら、私はRedditで同じ質問をし(この質問へのリンクあり)、正確なスキームコードで答えを得ました。
https://www.reddit.com/r/scheme/comments/fpt1b8/help_with_modulo_and_reminder_in_r5rs/
(define (modulo a b)
(- a (* b (floor (/ a b)))))
(define (remainder a b)
(- a (* b (truncate (/ a b)))))
;; as @soegaard show reminder is just JavaScript % so this can be
;; if % is proper function
(define (remainder a b)
(% a b))
R5RSの例でも同じように動作します。
(list
(= (modulo 13 4) 1)
(= (remainder 13 4) 1) ;; ===> 1
(= (modulo -13 4) 3) ;; ===> 3
(= (remainder -13 4) -1) ;; ===> -1
(= (modulo 13 -4) -3) ;; ===> -3
(= (remainder 13 -4) 1) ;; ===> 1
(= (modulo -13 -4) -1) ;; ===> -1
(= (remainder -13 -4) -1) ;; ===> -1
(= (remainder -13 -4.0) -1.0)) ;; ===> -1.0 ; inexact
floor
は
Math.floor
と
truncate
があります。
var truncate = (function() {
if (Math.trunc) {
return Math.trunc;
} else {
return function(x) {
if (x === 0) {
return 0;
} else if (x < 0) {
return Math.ceil(x);
} else {
return Math.floor(x);
}
};
}
})();
関連
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み] Access-Control-Allow-Originヘッダーはどのように機能するのですか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] JavaScriptで整数の除算を行い、余りを別途取得する方法は?
-
[解決済み】JavaScriptで2つの配列を結合し、項目の重複を排除する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】React Js: Uncaught (in promise) SyntaxError: 位置 0 の JSON で予期しないトークン < が発生しました。
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない