質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

2回答

1180閲覧

素数問題です。何故動いているのかが理解しきれていません。

Dach

総合スコア17

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2015/11/16 08:49

n個の素数を配列で表示するプログラムを作りました。とりあえず直感で作ってみたのですが、6行目の「if prime_r(num)」が何故成立しているのかがわかりません。

これは「prime_r(num)の結果がtrueだったから」実行されているのでしょうか?
また、if文でメソッドを条件文にした場合は、それがtrueだったら実行されるというRubyの仕様なのでしょうか。

詳しい解説をいただければ幸いです。
よろしくお願いいたします。

↓以下がプログラムです
def prime(n)
pri = Array.new
count = 0
num = 2
while count < n
if prime_r(num)
count += 1
pri << num
end
num += 1
end
pri
end

def prime_r(n)
prime_sub(n,n-1)
end

def prime_sub(n,m)
if m <= 1
true
elsif n % m == 0
false
else
prime_sub(n,m-1)
end
end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Ruby の if 文って、 false または nil だけが偽で、それ以外は値が 0 かどうかにかかわらず真になりませんでしたっけ?

つまり prime_sub が false を返すまで条件は true と言うことだと思います。

投稿2015/11/16 09:07

T.Kanno

総合スコア915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

T.Kanno

2015/11/16 09:55

いえいえ、自分も ruby は仕事で数回、数十行の奴を書いただけで、ほとんど解りません。 ・値 0 が false にならない ・return がないと、最後に評価された値が戻り値になる この辺は、他の言語の先入観で望むと、けっこう戸惑う部分だった記憶があります。
guest

0

ruby 使ったことありませんが
if prime_r(num)
if m <= 1
if n % m == 0
上記は全て同じです。
結果が true なので、if の中が実行されます。
if 文は、式の結果やメソッドの結果がtrue か false を判定していますので
if prime_r(num) の場合は、prime_r(num)の結果がtrue の場合は、
if の中が実行されます。

投稿2015/11/16 09:00

trick

総合スコア366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問