質問するログイン新規登録

回答編集履歴

3

素数のプログラムのバグ修正

2025/09/08 22:38

投稿

cametan
cametan

スコア209

answer CHANGED
@@ -141,18 +141,17 @@
141
141
  # わざと終了条件を与えず、無限長の素数列を得る例
142
142
  def primes():
143
143
  yield 2
144
- ps = unfoldr(isPrime, 3)
144
+ for p in unfoldr(isPrime, 3):
145
- while True:
146
- yield next(ps)
145
+ yield p
147
146
 
148
147
  def isPrime(n):
149
- ps = primes()
150
148
  while True:
151
- p = next(ps)
149
+ for p in primes():
152
- if p ** 2 > n:
150
+ if p ** 2 > n:
153
- return n, n + 2
151
+ return n, n + 2
154
- elif n % p == 0:
152
+ elif n % p == 0:
155
- n += 2
153
+ n += 2
154
+ break
156
155
 
157
156
 
158
157
  if __name__ == '__main__':

2

文章修正 + リンク修正

2025/09/07 18:23

投稿

cametan
cametan

スコア209

answer CHANGED
@@ -56,10 +56,10 @@
56
56
 
57
57
  ```
58
58
 
59
- ```foldr```は```range```の上位互換な故、```foldr```の機能を制限する事で```range```が書けるわけだ。
59
+ ```unfoldr```は```range```の上位互換な故、```unfoldr```の機能を制限する事で```range```が書けるわけだ。
60
60
 
61
- ```foldr```は[Haskell](https://www.haskell.org)と言うプログラミング言語の[```foldr```](https://hackage.haskell.org/package/base-4.21.0.0/docs/GHC-List.html#v:foldr)をPython向けに移植したモノだ。
62
- ```foldr```は引数を2つ取り、第一引数は関数、第二引数に「シード」と呼ばれる単一の値(データ)を取る。
61
+ ```unfoldr```は[Haskell](https://www.haskell.org)と言うプログラミング言語の[```unfoldr```](https://hackage.haskell.org/package/ghc-internal-9.1201.0/docs/src/GHC.Internal.Data.OldList.html#unfoldr)をPython向けに移植したモノだ。
62
+ ```unfoldr```は引数を2つ取り、第一引数は関数、第二引数に「シード」と呼ばれる単一の値(データ)を取る。
63
63
  ここで第一引数で取る関数のカタチが特徴的だ。ここでは[ラムダ式](https://docs.python.org/ja/3.13/tutorial/controlflow.html#lambda-expressions)を使うが、作成すべき関数は次のルールに従う。
64
64
 
65
65
  ```Python

1

文章修正

2025/09/07 18:15

投稿

cametan
cametan

スコア209

answer CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ```
34
34
 
35
- ここで作成したイテレータ```unfoldr```は、Python組み込みのイテレータ[```range```](https://docs.python.org/ja/3.13/library/functions.html#func-range)の亜種だ。
35
+ ここで作成した[イテレータ](https://docs.python.org/ja/3.13/tutorial/classes.html#iterators)```unfoldr```は、Python組み込みのイテレータ[```range```](https://docs.python.org/ja/3.13/library/functions.html#func-range)の亜種だ。
36
36
  と言うより、[```range```](https://docs.python.org/ja/3.13/library/functions.html#func-range)の上位互換だ。
37
37
 
38
38
  ```Python
@@ -42,7 +42,7 @@
42
42
  [0, 1, 2]
43
43
 
44
44
  ```
45
- 従って、単純には、```range```は```foldr```を利用すると次のように書ける。
45
+ 従って、単純には、```range```は```unfoldr```を利用すると次のように書ける。
46
46
 
47
47
  ```Python
48
48
  def range(*args):