過去スレ
オブジェクト指向はオワコン (2023/08/26~)
https://mevius.5ch.io/test/read.cgi/tech/1721393540/
オブジェクト指向はオワコン? (2024/07/19~)
https://mevius.5ch.io/test/read.cgi/tech/1721393540/
オブジェクト指向はオワコン? part2 (2026/08/13~)
https://mevius.5ch.io/test/read.cgi/tech/1786599483/
オブジェクト指向はオワコン? part3
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2026/08/26(水) 11:55:23.86ID:JrGcaWVK2026/08/26(水) 21:29:21.56ID:g57AhbG+
use feature 'current_sub';
@a = map{[split]} <DATA>;
($m, $n) = (20, 1);
sub {
$s = '';
map{0 == $n % $$_[0] and $s .= $$_[1]} @a;
$s ||= $n;
print "$s\n";
$n++, goto __SUB__ if $n < $m;
}->(1);
__DATA__
3 fizz
5 buzz
7 Pop
11 Jazz
注) Perl の「goto 関数」は continuation
@a = map{[split]} <DATA>;
($m, $n) = (20, 1);
sub {
$s = '';
map{0 == $n % $$_[0] and $s .= $$_[1]} @a;
$s ||= $n;
print "$s\n";
$n++, goto __SUB__ if $n < $m;
}->(1);
__DATA__
3 fizz
5 buzz
7 Pop
11 Jazz
注) Perl の「goto 関数」は continuation
2026/08/26(水) 21:47:43.21ID:eZJQS97n
>>https://mevius.5ch.io/test/read.cgi/tech/1786599483/599 ocaml
https://ideone.com/eaBULr
・Java版のRuby移植のOCaml移植
・連結済文字列じゃなくて、文字列のリストを返すようにしたのは単に気まぐれ
"FizzBuzz"じゃなくて["Fizz"; "Buzz"]を返してる
>>https://mevius.5ch.io/test/read.cgi/tech/1786599483/599 ocaml
https://ideone.com/Q1I3uT
・Woofの303がFizzFizzFizz版
・String.fold_leftは4.13以降
・今のideoneは OCaml (ocamlopt 4.05.0)
https://ideone.com/eaBULr
・Java版のRuby移植のOCaml移植
・連結済文字列じゃなくて、文字列のリストを返すようにしたのは単に気まぐれ
"FizzBuzz"じゃなくて["Fizz"; "Buzz"]を返してる
>>https://mevius.5ch.io/test/read.cgi/tech/1786599483/599 ocaml
https://ideone.com/Q1I3uT
・Woofの303がFizzFizzFizz版
・String.fold_leftは4.13以降
・今のideoneは OCaml (ocamlopt 4.05.0)
2026/08/26(水) 23:18:18.65ID:g57AhbG+
2026/08/27(木) 02:59:48.53ID:mXhKqiYf
2026/08/27(木) 03:28:54.64ID:2duuU1zk
対応すべきバリエーションはこれらしい
https://xapn.github.io/fizz-buzz/#fizz-buzz-variations
従来の割れるか classic
文字列化して含むか digits
割れるか含むか boom
割れると含む回数 woof
7と11を加えた popwhack
7,8,11,13を加えた zingchop
https://xapn.github.io/fizz-buzz/#fizz-buzz-variations
従来の割れるか classic
文字列化して含むか digits
割れるか含むか boom
割れると含む回数 woof
7と11を加えた popwhack
7,8,11,13を加えた zingchop
2026/08/27(木) 04:52:02.85ID:ZLNF9QnK
最大公約数の人がピンチ
2026/08/27(木) 05:24:18.52ID:ZLNF9QnK
120120通りの表を作れば行けるはず
12デフォルトの名無しさん
2026/08/27(木) 08:57:42.39ID:cR01dGum 場のオブジェクト指向おじさん星になる
2026/08/27(木) 14:06:06.68ID:MPTEZ6Aa
バリエーションと圏論は相性良さそうな気がするけど出て来ないね
2026/08/27(木) 15:22:19.20ID:zRz8ZAFs
最小限の射へ分解
2026/08/27(木) 18:36:24.91ID:690S30xg
なんだろうね、素数だから数学的におもしろかったのに、
割れると含むとか入ってきて、
さらに8ってのはどこからでてきたものなんだか、2^3ということかな?
「場のオブジェクト指向」では、すべが計算済の「場」とするので、
どうやるかは量子計算での加法の扱いにかかってくる。考え中。まあ、
できたらフィールズとかノーベルとかのレベルだから考えて楽しんでいるだけ笑。
問題は、場の量子論で「加法」をどのようなものとして扱うか、ということ。
割れると含むとか入ってきて、
さらに8ってのはどこからでてきたものなんだか、2^3ということかな?
「場のオブジェクト指向」では、すべが計算済の「場」とするので、
どうやるかは量子計算での加法の扱いにかかってくる。考え中。まあ、
できたらフィールズとかノーベルとかのレベルだから考えて楽しんでいるだけ笑。
問題は、場の量子論で「加法」をどのようなものとして扱うか、ということ。
2026/08/27(木) 18:40:27.89ID:orbJGS24
>>15
zingchopで8で割り切れる時を扱わなければいけなくなって場のオブジェクト指向は破綻したのか~
zingchopで8で割り切れる時を扱わなければいけなくなって場のオブジェクト指向は破綻したのか~
2026/08/27(木) 18:54:44.95ID:690S30xg
場のオブジェクト指向は考え中のものだから、破綻はしていない、むしろ、
今回のようなルールが無限に増える場合に対応するものとして構想している。
ルールに割れるだけはなく、含むが加わった。
しかも、どうやら指数すらも含まれるような感じ。
自然数を表現可能なすべての表記が入るのだろう。n進数も。
自然数限定だが表現論の問題になっている。
今回のようなルールが無限に増える場合に対応するものとして構想している。
ルールに割れるだけはなく、含むが加わった。
しかも、どうやら指数すらも含まれるような感じ。
自然数を表現可能なすべての表記が入るのだろう。n進数も。
自然数限定だが表現論の問題になっている。
2026/08/27(木) 19:02:05.64ID:D3cdieEZ
2026/08/27(木) 19:52:18.64ID:oWHoRr+4
>>9
ざっと縦読み目を通したけどmethoc chainで呼んだ場合の処理とカ書いてあって
結局、各方式ごとの関数なりmethodが要るってことになるし
昨日関数間でコードの共通化できるとことはあんまりない感じだな
ざっと縦読み目を通したけどmethoc chainで呼んだ場合の処理とカ書いてあって
結局、各方式ごとの関数なりmethodが要るってことになるし
昨日関数間でコードの共通化できるとことはあんまりない感じだな
2026/08/27(木) 19:55:08.94ID:Fm6ww48Z
今回の件は全体が見やすいように3つの部分に分けるとプログラムはこれだけだね
type Count = fn(usize, usize) -> usize;
const DIV: Count = |t, n| (t % n == 0) as usize;
const IN: Count = |t, n| t.to_string().contains(&n.to_string()) as usize;
const DIV_OR_IN: Count = |t, n| (t % n == 0 || t.to_string().contains(&n.to_string())) as usize;
const DIV_AND_MULTI_IN: Count = |t, n| (t % n == 0) as usize + t.to_string().split(&n.to_string()).count() - 1;
type Rule<'a> = (Count, &'a[(usize, &'a str)]);
const CLASSIC: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz")]);
const DIGITS: Rule = (IN, &[(3, "Fizz"), (5, "Buzz")]);
const BOOM: Rule = (DIV_OR_IN, &[(3, "Fizz"), (5, "Buzz"), (7, "Boom")]);
const WOOF: Rule = (DIV_AND_MULTI_IN, &[(3, "Fizz"), (5, "Buzz"), (7, "Woof")]);
const POP_WHACK: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz"), (7, "Pop"), (11, "Whack")]);
const ZING_CHOP: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz"), (7, "Pop"), (8, "Zing"), (11, "Whack"), (13, "Chop")]);
struct FizzBuzz<'a>(usize, Rule<'a>);
impl<'a> std::fmt::Display for FizzBuzz<'a> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let FizzBuzz(target, (count, list)) = self;
let mut is_done = false;
for &(number, name) in *list {
for _ in 0..count(*target, number) {
f.write_str(name)?;
is_done = true;
}
}
if !is_done {
write!(f, "{target}")?;
}
Ok(())
}
}
type Count = fn(usize, usize) -> usize;
const DIV: Count = |t, n| (t % n == 0) as usize;
const IN: Count = |t, n| t.to_string().contains(&n.to_string()) as usize;
const DIV_OR_IN: Count = |t, n| (t % n == 0 || t.to_string().contains(&n.to_string())) as usize;
const DIV_AND_MULTI_IN: Count = |t, n| (t % n == 0) as usize + t.to_string().split(&n.to_string()).count() - 1;
type Rule<'a> = (Count, &'a[(usize, &'a str)]);
const CLASSIC: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz")]);
const DIGITS: Rule = (IN, &[(3, "Fizz"), (5, "Buzz")]);
const BOOM: Rule = (DIV_OR_IN, &[(3, "Fizz"), (5, "Buzz"), (7, "Boom")]);
const WOOF: Rule = (DIV_AND_MULTI_IN, &[(3, "Fizz"), (5, "Buzz"), (7, "Woof")]);
const POP_WHACK: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz"), (7, "Pop"), (11, "Whack")]);
const ZING_CHOP: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz"), (7, "Pop"), (8, "Zing"), (11, "Whack"), (13, "Chop")]);
struct FizzBuzz<'a>(usize, Rule<'a>);
impl<'a> std::fmt::Display for FizzBuzz<'a> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let FizzBuzz(target, (count, list)) = self;
let mut is_done = false;
for &(number, name) in *list {
for _ in 0..count(*target, number) {
f.write_str(name)?;
is_done = true;
}
}
if !is_done {
write!(f, "{target}")?;
}
Ok(())
}
}
2026/08/27(木) 19:57:41.36ID:B+aurL2q
>>20のプログラムの検証
他のプログラムが通してる事例を参考にしました
fn main() {
use itertools::Itertools;
assert_eq!((1..=15).map(|t| FizzBuzz(t, CLASSIC)).join(" "),
"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, DIGITS)).join(" "),
"1 2 Fizz 4 Buzz 6 7 8 9 10 11 12 Fizz 14 Buzz");
assert_eq!(FizzBuzz(35, DIGITS).to_string(), "FizzBuzz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, BOOM)).join(" "),
"1 2 Fizz 4 Buzz Fizz Boom 8 Fizz Buzz 11 Fizz Fizz Boom FizzBuzz");
assert_eq!(FizzBuzz(7539, BOOM).to_string(), "FizzBuzzBoom");
assert_eq!((1..=15).map(|t| FizzBuzz(t, WOOF)).join(" "),
"1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz");
assert_eq!(FizzBuzz(35, WOOF).to_string(), "FizzBuzzBuzzWoof");
assert_eq!(FizzBuzz(303, WOOF).to_string(), "FizzFizzFizz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, POP_WHACK)).join(" "),
"1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz 13 Pop FizzBuzz");
assert_eq!(FizzBuzz(1155, POP_WHACK).to_string(), "FizzBuzzPopWhack");
assert_eq!((1..=15).map(|t| FizzBuzz(t, ZING_CHOP)).join(" "),
"1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz");
assert_eq!(FizzBuzz(120120, ZING_CHOP).to_string(), "FizzBuzzPopZingWhackChop");
}
他のプログラムが通してる事例を参考にしました
fn main() {
use itertools::Itertools;
assert_eq!((1..=15).map(|t| FizzBuzz(t, CLASSIC)).join(" "),
"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, DIGITS)).join(" "),
"1 2 Fizz 4 Buzz 6 7 8 9 10 11 12 Fizz 14 Buzz");
assert_eq!(FizzBuzz(35, DIGITS).to_string(), "FizzBuzz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, BOOM)).join(" "),
"1 2 Fizz 4 Buzz Fizz Boom 8 Fizz Buzz 11 Fizz Fizz Boom FizzBuzz");
assert_eq!(FizzBuzz(7539, BOOM).to_string(), "FizzBuzzBoom");
assert_eq!((1..=15).map(|t| FizzBuzz(t, WOOF)).join(" "),
"1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz");
assert_eq!(FizzBuzz(35, WOOF).to_string(), "FizzBuzzBuzzWoof");
assert_eq!(FizzBuzz(303, WOOF).to_string(), "FizzFizzFizz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, POP_WHACK)).join(" "),
"1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz 13 Pop FizzBuzz");
assert_eq!(FizzBuzz(1155, POP_WHACK).to_string(), "FizzBuzzPopWhack");
assert_eq!((1..=15).map(|t| FizzBuzz(t, ZING_CHOP)).join(" "),
"1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz");
assert_eq!(FizzBuzz(120120, ZING_CHOP).to_string(), "FizzBuzzPopZingWhackChop");
}
2026/08/27(木) 20:04:52.73ID:B+aurL2q
2026/08/27(木) 20:07:16.28ID:B+aurL2q
2026/08/27(木) 21:26:28.84ID:8QFJ8g/P
結局ルール辞書作ってぶん回すだけ
2026/08/27(木) 21:44:42.61ID:jj+fH9nA
2026/08/27(木) 22:15:46.22ID:5F56ltBp
>>9 ocaml
https://ideone.com/iRLbSx
・>>6から若干の改善
・判定につかってたcontains,countの実装が簡易的だったので整数比較版に差し替え
・結果のリストに対するinspect関数つくっといた
to_s関数を`List xsに対応させてみたりしたけどなんか使い勝手が悪かったのでこっちにした
https://ideone.com/iRLbSx
・>>6から若干の改善
・判定につかってたcontains,countの実装が簡易的だったので整数比較版に差し替え
・結果のリストに対するinspect関数つくっといた
to_s関数を`List xsに対応させてみたりしたけどなんか使い勝手が悪かったのでこっちにした
2026/08/27(木) 23:10:16.64ID:JGcFzlP+
もしやこのコードは
>>26
let count m n =
let m, n = abs m, abs n in
let d = if n = 0 then 10 else int_of_float (10. ** (1.0 +. (floor (log10 (float_of_int n))))) in
let rec aux acc = function
0 -> acc
| m -> aux (if m mod d = n then acc + 1 else acc) (m / 10)
in if m = n then 1 else aux 0 m
let contains m n = 0 < count m n
>>26
let count m n =
let m, n = abs m, abs n in
let d = if n = 0 then 10 else int_of_float (10. ** (1.0 +. (floor (log10 (float_of_int n))))) in
let rec aux acc = function
0 -> acc
| m -> aux (if m mod d = n then acc + 1 else acc) (m / 10)
in if m = n then 1 else aux 0 m
let contains m n = 0 < count m n
2026/08/28(金) 00:57:49.88ID:JtiuId7a
今のところ前スレ>>938が一番まともやな
変換辞書と変換ロジックのセットとして扱ってればなお良かった
にしても不必要なcount変数やflag変数を導入するやつとか
ToString()にドメインロジックを全部突っ込むやつとか
おかしなやつが多いな
変換辞書と変換ロジックのセットとして扱ってればなお良かった
にしても不必要なcount変数やflag変数を導入するやつとか
ToString()にドメインロジックを全部突っ込むやつとか
おかしなやつが多いな
2026/08/28(金) 01:03:24.74ID:G07hbVrD
938を見たら145行もあった
動作確認printしてるmain関数8行を除いても130行以上ある
動作確認printしてるmain関数8行を除いても130行以上ある
2026/08/28(金) 01:14:03.41ID:V1qxHZLT
行数が多いとその分稼げるから
2026/08/28(金) 01:54:07.21ID:ejEAHwUa
32デフォルトの名無しさん
2026/08/28(金) 10:59:36.72ID:vRP1YcXq >>20
これはRust? OCamlかと思った
これはRust? OCamlかと思った
2026/08/28(金) 11:05:17.28ID:jFdmEMQD
>>31
神クラスならぬ神toStringか
神クラスならぬ神toStringか
2026/08/28(金) 15:22:57.83ID:/07wmBHQ
>>28
その938もToStringする関数にメインロジックを書いてるけど938をお気に入りな理由は何?
その938もToStringする関数にメインロジックを書いてるけど938をお気に入りな理由は何?
2026/08/28(金) 17:14:26.88ID:rzP/gEC0
文字列にする関数とドメインロジックを分けることがそもそも可能なのかね?
2026/08/28(金) 17:19:54.32ID:AdOWYx/j
javaのtoString()はデバッガでも表示に使用されるため、
オブジェクトの区別がつけられるユニークな内容のみで使用するのが望ましい。
できればデバッグ用以外には使用しない。
デバッグで必要となるため、
すべてのオブジェクトは、toString()でオブジェクトの文字列表現を正しく返すように実装すべき。
オブジェクトの区別がつけられるユニークな内容のみで使用するのが望ましい。
できればデバッグ用以外には使用しない。
デバッグで必要となるため、
すべてのオブジェクトは、toString()でオブジェクトの文字列表現を正しく返すように実装すべき。
2026/08/28(金) 17:31:27.47ID:ZVKaIJD5
唐突に何だろ
そんなレベルの問題を起こしてるコードはこのスレで見たことない
そんなレベルの問題を起こしてるコードはこのスレで見たことない
2026/08/28(金) 18:32:32.01ID:AdOWYx/j
extends is evilの潜在的バグはtoString()用法の間違いが一番多いので。
2026/08/28(金) 18:37:55.90ID:faseFIiy
それは文字列化とデバッグ用を混乱しているJavaの問題
オブジェクト指向プログラミングとは無関係
オブジェクト指向プログラミングとは無関係
2026/08/28(金) 23:12:32.16ID:IC5ebjaM
いつもJavaの仕様や方針が足を引っ張ってるような
2026/08/29(土) 01:52:38.70ID:vvNmpd5E
javaは単純化しようとしてかえって初心者には扱えないものになってしまった。
toString()の例は、オブジェクト指向(設計)の例で、
設計や、実装の段階では、指示しているオブジェクトが正しいつもりでも、
実際に実行してみると、想定とは異なったオブジェクトにメッセージを投げていたりする。
相手だけではなく、自分自身も設計・実装時に想定していた自分(this)とは違う自分(this)
になっていたりする。
手続き型の現物プログラミングやスクリプト言語ばかりやっていたりすると、
オブジェクト指向の抽象プログラミングでバグる。
設計が正しくても、実装する側が手続き型しか使ったことがなかったりすると、確実にバグが発生する。
toString()の例は、オブジェクト指向(設計)の例で、
設計や、実装の段階では、指示しているオブジェクトが正しいつもりでも、
実際に実行してみると、想定とは異なったオブジェクトにメッセージを投げていたりする。
相手だけではなく、自分自身も設計・実装時に想定していた自分(this)とは違う自分(this)
になっていたりする。
手続き型の現物プログラミングやスクリプト言語ばかりやっていたりすると、
オブジェクト指向の抽象プログラミングでバグる。
設計が正しくても、実装する側が手続き型しか使ったことがなかったりすると、確実にバグが発生する。
2026/08/29(土) 06:05:43.95ID:TS4tMF6R
「オブジェクト指向の抽象プログラミング」
「確実にバグが発生する」
「確実にバグが発生する」
2026/08/29(土) 06:08:45.54ID:TS4tMF6R
「Javaによく慣れて精通していないと嵌る落とし穴のある言語だ」
くらいに抽象化して言えないのかな
くらいに抽象化して言えないのかな
2026/08/29(土) 06:11:22.93ID:TS4tMF6R
よく慣れて精通していないと嵌る落とし穴満載の言語で最たるものはC++が王様だな
いや、たとえ精通していても…
いや、たとえ精通していても…
2026/08/29(土) 07:52:16.86ID:TS4tMF6R
特に何も抽象化していないいのに抽象化という言葉を使うのはやめましょうよ
ものすごい違和感というかもはや不快感を覚える
ものすごい違和感というかもはや不快感を覚える
2026/08/29(土) 09:17:10.24ID:vvNmpd5E
オブジェクト指向(設計)とは抽象化ですよ。
オブジェクト指向言語は抽象化言語。
オブジェクトやメッセージに抽象化することで状態や実装を隠ぺいする手法なのです。
オブジェクト指向言語は抽象化言語。
オブジェクトやメッセージに抽象化することで状態や実装を隠ぺいする手法なのです。
2026/08/29(土) 09:23:35.17ID:vvNmpd5E
javaは単純化したのが命取りのようではあるが、
手続き型中心のオールドプログラマを攪乱し、リバースエンジニアリングさせない効果はある。
手続き型中心のオールドプログラマを攪乱し、リバースエンジニアリングさせない効果はある。
48デフォルトの名無しさん
2026/08/29(土) 09:36:07.10ID:aWidT367 parseIntが面倒糞かった
2026/08/29(土) 09:57:03.79ID:AkEEaDxp
どちらかというと、手続型(命令型)と関数型(宣言型)が対立的な概念で、オブジェクト指向は手続型の範疇というイメージかな。もっとも、関数型(宣言型)の良いところを部分的にではあれ取り入れようという動きは顕著よね。
手続型(命令型)の書き方をベースに書くときに、どの程度オブジェクト指向的な書き方をするかと、どの程度関数型的な考え方を取り入れるかはそれぞれ独立のことだと思う。
手続型(命令型)の書き方をベースに書くときに、どの程度オブジェクト指向的な書き方をするかと、どの程度関数型的な考え方を取り入れるかはそれぞれ独立のことだと思う。
2026/08/29(土) 10:06:37.01ID:0Mn9C3Co
51デフォルトの名無しさん
2026/08/29(土) 10:27:55.15ID:fZdYpOMd オブジェクト=タスクマシン
他のプログラムに干渉されずに独立してプログラムを実行できる仕組み、ならいいんだが
delay()使っても止まってるのはそこだけで、他を止めない
他のプログラムに干渉されずに独立してプログラムを実行できる仕組み、ならいいんだが
delay()使っても止まってるのはそこだけで、他を止めない
2026/08/29(土) 10:30:24.25ID:f/1ZU8tv
>>51
それは非同期並行タスクとしてそれを持つ各言語で実現されてる
それは非同期並行タスクとしてそれを持つ各言語で実現されてる
53デフォルトの名無しさん
2026/08/29(土) 10:53:35.90ID:fZdYpOMd2026/08/29(土) 10:59:38.34ID:3IaJuUID
>>50
関数型の考え方を取り入れるというので想定していたのは、純粋でない関数はできるだけ減らすとか、高階関数を活用するとかの素朴な考え方だけど、これらはオブジェクト指向の直接的な関心事ではないでしょう。オブジェクト指向でも取り入れることはできるけど。
いわゆるメソッドチェーンは、それ自体としては宣言的になる場合もあれば、命令的になる場合もあるんじゃないかな。
関数型の考え方を取り入れるというので想定していたのは、純粋でない関数はできるだけ減らすとか、高階関数を活用するとかの素朴な考え方だけど、これらはオブジェクト指向の直接的な関心事ではないでしょう。オブジェクト指向でも取り入れることはできるけど。
いわゆるメソッドチェーンは、それ自体としては宣言的になる場合もあれば、命令的になる場合もあるんじゃないかな。
2026/08/29(土) 11:34:40.00ID:423ljc0S
宣言的な度合いに相対的な高低差があるというだけ
2026/08/29(土) 12:40:11.16ID:TS4tMF6R
何か抽象的なような煙に巻くような言い方だなw
2026/08/29(土) 12:49:02.40ID:TS4tMF6R
2026/08/29(土) 12:52:07.49ID:TS4tMF6R
他の言語やパラダイムも勉強して視野広げたほうが良いと思うの
それから、客観的にものを見られるようになったり、合理的に考えたりする力の訓練もね
それから、客観的にものを見られるようになったり、合理的に考えたりする力の訓練もね
2026/08/29(土) 14:38:46.17ID:vvNmpd5E
まあ、どうのこうのといっても、手続き型言語も抽象化されたものだし、
CPUやGPUなども抽象化されたものだし、
その意味では、最初からオブジェクト指向で設計されているともいえる。
数学的な理論づけとしては圏論も欠かせない。
が、これから重要なのは情報理論。それはエネルギー論でもあり、場の量子論でもある、ということ。
CPUやGPUなども抽象化されたものだし、
その意味では、最初からオブジェクト指向で設計されているともいえる。
数学的な理論づけとしては圏論も欠かせない。
が、これから重要なのは情報理論。それはエネルギー論でもあり、場の量子論でもある、ということ。
2026/08/29(土) 14:42:32.22ID:TS4tMF6R
場のおじさんだったかw
2026/08/29(土) 14:44:31.67ID:TS4tMF6R
CPUやGPUは尤も生々しい具現だチューにw
あんた、場だの論だの抽象だの既存の権威付けられた言葉の印象に憧れてるか酔ってるだけでは?
あんた、場だの論だの抽象だの既存の権威付けられた言葉の印象に憧れてるか酔ってるだけでは?
2026/08/29(土) 14:53:07.22ID:rNNd9weC
>>9 java
https://ideone.com/DCrHR4
・Woofの303がFizzFizzFizz版
・countは正規表現つかって実装
・clone, list(b, e)メソッド追加
>>9 ruby
https://ideone.com/1G57lm
・Woofの303がFizzFizzFizz版
・countは正規表現つかって実装
https://ideone.com/DCrHR4
・Woofの303がFizzFizzFizz版
・countは正規表現つかって実装
・clone, list(b, e)メソッド追加
>>9 ruby
https://ideone.com/1G57lm
・Woofの303がFizzFizzFizz版
・countは正規表現つかって実装
2026/08/29(土) 15:59:58.58ID:vvNmpd5E
勉強不足ですなー。CPU/GPUは抽象計算機を物理的に実装したものですよ。
計算モデルに従います。
計算モデルに従います。
2026/08/29(土) 16:24:33.04ID:TS4tMF6R
CPU/GPUもやっぱり場の理論によって動作しているのですか?
2026/08/29(土) 16:30:25.43ID:TS4tMF6R
場の理論といえばやっぱりランダウのバコテン(場の古典論)、QEDはFeynmanが懐かしい
2026/08/29(土) 16:34:22.45ID:TS4tMF6R
論的量子力学・QFDはBjorken Drell、QCDはFeynman
67デフォルトの名無しさん
2026/08/29(土) 18:32:43.11ID:KuxNJihv オブジェクト指向はオワコン?
んなこたーない
んなこたーない
2026/08/29(土) 19:17:04.88ID:vvNmpd5E
>>64
ま、量子世界にいるわけですから、いまのところ場の量子論で動作しているということでも
いいわけですが、量子レベルの現象を直接扱っているわけではないと。
現在の計算モデルは、何世代目かの宇宙における構造(カラビヤウ多様体)に起因していると考えております。
ま、量子世界にいるわけですから、いまのところ場の量子論で動作しているということでも
いいわけですが、量子レベルの現象を直接扱っているわけではないと。
現在の計算モデルは、何世代目かの宇宙における構造(カラビヤウ多様体)に起因していると考えております。
2026/08/29(土) 19:35:44.90ID:j0hb6XXF
オブジェクトンとオブジェクティーノの対称性
2026/08/29(土) 22:02:37.14ID:d/nwX98j
>>32
その通りRustだよ
>>36
Rustは3つのインターフェースに分かれてるよ
trait Debug デバック表示用の文字列化
trait Display 通常の文字列化
trait ToString 通常の文字列化+文字列型Stringに格納するためのメモリ確保
文字列型へのToStringはこのように非常に重い処理なので分離されてる
表示や既存文字列への追記は中間生成Stringを作ると無駄だからね
プログラマはDisplayを実装すればToStringは自動実装されるよ
Debugはそれらと独立のもので自分でも実装していいけど
各型の宣言に #[derive(Debug)] を修飾すると機械的に自動実装してくれる
その通りRustだよ
>>36
Rustは3つのインターフェースに分かれてるよ
trait Debug デバック表示用の文字列化
trait Display 通常の文字列化
trait ToString 通常の文字列化+文字列型Stringに格納するためのメモリ確保
文字列型へのToStringはこのように非常に重い処理なので分離されてる
表示や既存文字列への追記は中間生成Stringを作ると無駄だからね
プログラマはDisplayを実装すればToStringは自動実装されるよ
Debugはそれらと独立のもので自分でも実装していいけど
各型の宣言に #[derive(Debug)] を修飾すると機械的に自動実装してくれる
2026/08/29(土) 22:10:23.07ID:d/nwX98j
FizzBuzzへのtrait Displayの実装例が >>20
コストの高いメモリ確保処理は分離されて純粋な文字列化処理のみになってるよ
Rustはこれが標準で数値などのプリミティブ型も全てtrait Displayを実装
こうすることで何がメリットかというと
例えば >>21 のこの処理
「1から15までのBizzFizzの結果をスペースで繋げて1つの文字列にするコード」
(1..=15).map(|t| FizzBuzz(t, CLASSIC)).join(" ")
よくある15個のStringを生成してそれらを繋げて1つのStringを作るのと比べて
join()はtrait Display実装型を受け付けるため一気に1つのStringのみ作ります
15個の中間生成Stringのメモリ確保と生成を省くことができてます
これはjoin()に限らずprint!系なども同様です
コストの高いメモリ確保処理は分離されて純粋な文字列化処理のみになってるよ
Rustはこれが標準で数値などのプリミティブ型も全てtrait Displayを実装
こうすることで何がメリットかというと
例えば >>21 のこの処理
「1から15までのBizzFizzの結果をスペースで繋げて1つの文字列にするコード」
(1..=15).map(|t| FizzBuzz(t, CLASSIC)).join(" ")
よくある15個のStringを生成してそれらを繋げて1つのStringを作るのと比べて
join()はtrait Display実装型を受け付けるため一気に1つのStringのみ作ります
15個の中間生成Stringのメモリ確保と生成を省くことができてます
これはjoin()に限らずprint!系なども同様です
2026/08/30(日) 00:00:26.48ID:yu9ZFHyT
自然数の文字化だけだとユニークで一対一なのでフェルミだ。
これを3の倍数とか5の倍数とかで文字化すると、そこは複数の値が同じ文字になるのでボゾンだ。
量子統計が異なる。
で、フェルミが積で、ボゾンが和だ。場の量子論から、そうなる。(かなりすっ飛ばした結論笑)
区別がつくものは積であらわされ、区別がつかないものは和であらわされる。
積と和がハイブリッドしたもの...それはアレだ!(ホントかどうか調査中)
これを3の倍数とか5の倍数とかで文字化すると、そこは複数の値が同じ文字になるのでボゾンだ。
量子統計が異なる。
で、フェルミが積で、ボゾンが和だ。場の量子論から、そうなる。(かなりすっ飛ばした結論笑)
区別がつくものは積であらわされ、区別がつかないものは和であらわされる。
積と和がハイブリッドしたもの...それはアレだ!(ホントかどうか調査中)
73デフォルトの名無しさん
2026/08/30(日) 09:43:55.16ID:bKWi44d12026/08/30(日) 09:49:33.46ID:w2cYbX0h
75デフォルトの名無しさん
2026/08/30(日) 09:58:51.17ID:bKWi44d1 手続き型で普通のシンプルな条件処理で済むじゃん
2026/08/30(日) 10:08:44.94ID:ojN7H2ox
77デフォルトの名無しさん
2026/08/30(日) 10:23:40.42ID:bKWi44d1 BizzFizzの話題になった初期に出てるじゃん
2026/08/30(日) 10:41:12.00ID:1YnRSpXX
>>73
オブジェクト指向によってその無駄なCPUの作業を減らしている好例だよ
「文字列型への変換」という格納メモリ確保を伴う重い作業から
「純粋に文字列への変換のみ」を別のインターフェースとして切り出している
そうすることで無駄な一時的な文字列型の生成を防ぐことができているよ
オブジェクト指向によってその無駄なCPUの作業を減らしている好例だよ
「文字列型への変換」という格納メモリ確保を伴う重い作業から
「純粋に文字列への変換のみ」を別のインターフェースとして切り出している
そうすることで無駄な一時的な文字列型の生成を防ぐことができているよ
2026/08/30(日) 10:43:29.99ID:aK1yIV+Q
>>74
「何が」オブジェクト指向だから実現できてるの?
「何が」オブジェクト指向だから実現できてるの?
2026/08/30(日) 10:55:27.68ID:1YnRSpXX
オブジェクト指向によって
全ての型に対して「(メモリ確保を伴わない)純粋な文字列化変換」という共通インターフェース(trait Display)を設けて各型がそれを実装しています
それを用いて「(メモリ確保を伴う)文字列型への変換」という共通インターフェース(trait ToString)が全ての型に自動実装されます
この両者の分離により無駄なCPU処理と無駄な一時メモリ確保を防いでいます
全ての型に対して「(メモリ確保を伴わない)純粋な文字列化変換」という共通インターフェース(trait Display)を設けて各型がそれを実装しています
それを用いて「(メモリ確保を伴う)文字列型への変換」という共通インターフェース(trait ToString)が全ての型に自動実装されます
この両者の分離により無駄なCPU処理と無駄な一時メモリ確保を防いでいます
2026/08/30(日) 11:14:54.65ID:aK1yIV+Q
82デフォルトの名無しさん
2026/08/30(日) 11:26:45.55ID:ObqeWEXz 一般的にオブジェクト指向を使わないとインターフェイス抽象型による共通の扱いができないから各々の型でバラバラにやることになって破綻だよな
2026/08/30(日) 11:40:06.08ID:s//RVPFN
複数の異なる型を同じメソッドで呼び出しできる
これがオブジェクト指向の最大の利点だ
これがオブジェクト指向の最大の利点だ
2026/08/30(日) 11:55:44.13ID:G2IJmQcd
多相性は型システムの問題のような気もするけど。
2026/08/30(日) 12:20:44.08ID:fii30PKr
単なる多相性だと型を横断しての共通呼び出しが保証されない
86デフォルトの名無しさん
2026/08/30(日) 12:22:49.81ID:sEhy0si7 >>49
無駄なこだわり主張して現場を困らせるやつの典型例だな
無駄なこだわり主張して現場を困らせるやつの典型例だな
2026/08/30(日) 12:59:42.79ID:yu9ZFHyT
手続き型が小汚いので、各オブジェクト指向系言語は工夫しているが、
ダメなものはダメで、さらに小汚いものが書かれて、それをオブジェクト指向のせいにしている。
Why extends is evil が、その典型的な例で、最後にはなにも解決せず、さらに悪化させたまま
終わっている。そこには絶望しか残っていない。
手続き型でも、キレイにかけるやつはかけるのだが...残念なプログラマが多い。
プログラムは文学的/文芸的であるが、叙述ミステリーであっては困る。
ダメなものはダメで、さらに小汚いものが書かれて、それをオブジェクト指向のせいにしている。
Why extends is evil が、その典型的な例で、最後にはなにも解決せず、さらに悪化させたまま
終わっている。そこには絶望しか残っていない。
手続き型でも、キレイにかけるやつはかけるのだが...残念なプログラマが多い。
プログラムは文学的/文芸的であるが、叙述ミステリーであっては困る。
2026/08/30(日) 14:57:11.05ID:pFZkzj89
>>9 java
https://ideone.com/C9Cmel
・Woofの303がFizzFizzFizz版
・OOPらしく(?)継承でなんとかするやつ
・委譲でなんとかするやつは>>62
>>9 octave
https://ideone.com/MXBicD
・Woofの303がFizzFizzFizz版
・Java版のRuby移植のOCaml移植のOctave移植
・ほかの言語のクセが混入しちゃってOctaveらしくないかも
https://ideone.com/C9Cmel
・Woofの303がFizzFizzFizz版
・OOPらしく(?)継承でなんとかするやつ
・委譲でなんとかするやつは>>62
>>9 octave
https://ideone.com/MXBicD
・Woofの303がFizzFizzFizz版
・Java版のRuby移植のOCaml移植のOctave移植
・ほかの言語のクセが混入しちゃってOctaveらしくないかも
2026/08/30(日) 16:03:46.74ID:nFoXKPIw
use v5.36; use utf8;
my %h = ( 3=>'Fizz', 5=>'Buzz', 7=>'Boom/Woof/Pop', 8=>'Zing', 11=>'Whack', 13=>'Chop' );
sub 割り切れる($n, $d){ 0 == $n % $d }
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
sub 割り切れれば変換($n, @s){ join '', map{ $h{$_} if 割り切れる($n, $_) } @s }
sub 桁に含むなら変換($n, @s){ join '', map{ $h{$_} if 0 < 桁に含む個数($n, $_) } @s }
sub Classic{ map{ 割り切れれば変換($_, 3, 5) or $_ } @_ };
sub Digits{ map{ 桁に含むなら変換($_, 3, 5) or $_ } @_ };
sub Boom{ $h{7} = 'Boom'; map{ my $n = $_;
join('', map {$h{$_} if 割り切れる($n, $_) or 0 < 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
sub Woof{ $h{7} = 'Woof'; map{ my $n = $_;
join('', map {割り切れる($n, $_) and $h{$_} . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
sub Pop_Whack{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11) or $_ } @_ };
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11,13) or $_ } @_ };
# test main
do { my ($func, @args) = @$_;
say "@{[$func->(@args)]}" }
for [\&Classic, 1...15], [\&Digits , 1...15, 35], [\&Boom , 1...15, 7539], [\&Woof , 1...15, 35, 303],
[\&Pop_Whack, 1...15, 1155], [\&Pop_Whack_Zing_Chop, 1...15, 120120];
※closureや関数の部分適用などOOPSやFunctional的な仕組みを使ってみようかと思ったけど、使うまでもなかった
my %h = ( 3=>'Fizz', 5=>'Buzz', 7=>'Boom/Woof/Pop', 8=>'Zing', 11=>'Whack', 13=>'Chop' );
sub 割り切れる($n, $d){ 0 == $n % $d }
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
sub 割り切れれば変換($n, @s){ join '', map{ $h{$_} if 割り切れる($n, $_) } @s }
sub 桁に含むなら変換($n, @s){ join '', map{ $h{$_} if 0 < 桁に含む個数($n, $_) } @s }
sub Classic{ map{ 割り切れれば変換($_, 3, 5) or $_ } @_ };
sub Digits{ map{ 桁に含むなら変換($_, 3, 5) or $_ } @_ };
sub Boom{ $h{7} = 'Boom'; map{ my $n = $_;
join('', map {$h{$_} if 割り切れる($n, $_) or 0 < 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
sub Woof{ $h{7} = 'Woof'; map{ my $n = $_;
join('', map {割り切れる($n, $_) and $h{$_} . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
sub Pop_Whack{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11) or $_ } @_ };
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11,13) or $_ } @_ };
# test main
do { my ($func, @args) = @$_;
say "@{[$func->(@args)]}" }
for [\&Classic, 1...15], [\&Digits , 1...15, 35], [\&Boom , 1...15, 7539], [\&Woof , 1...15, 35, 303],
[\&Pop_Whack, 1...15, 1155], [\&Pop_Whack_Zing_Chop, 1...15, 120120];
※closureや関数の部分適用などOOPSやFunctional的な仕組みを使ってみようかと思ったけど、使うまでもなかった
2026/08/30(日) 16:04:05.95ID:nFoXKPIw
実行結果
~ $ perl FizzBuzz_variations-26830.pl
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
1 2 Fizz 4 Buzz 6 7 8 9 10 11 12 Fizz 14 Buzz FizzBuzz
1 2 Fizz 4 Buzz Fizz Boom 8 Fizz Buzz 11 Fizz Fizz Boom FizzBuzz FizzBuzzBoom
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz 13 Woof FizzBuzzBuzz BuzzBuzzWoof FizzFizzFizz
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz 13 Pop FizzBuzz FizzBuzzPopWhack
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz Chop Pop FizzBuzz FizzBuzzPopWhackChop
~ $ perl FizzBuzz_variations-26830.pl
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
1 2 Fizz 4 Buzz 6 7 8 9 10 11 12 Fizz 14 Buzz FizzBuzz
1 2 Fizz 4 Buzz Fizz Boom 8 Fizz Buzz 11 Fizz Fizz Boom FizzBuzz FizzBuzzBoom
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz 13 Woof FizzBuzzBuzz BuzzBuzzWoof FizzFizzFizz
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz 13 Pop FizzBuzz FizzBuzzPopWhack
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz Chop Pop FizzBuzz FizzBuzzPopWhackChop
2026/08/30(日) 17:17:51.85ID:G2IJmQcd
おー、octaveって初めて見た。
92デフォルトの名無しさん
2026/08/30(日) 17:47:10.29ID:VHTnCP+C >>90
むむ、4番目と6番目の結果が違う
4番目
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz
6番目
1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz
むむ、4番目と6番目の結果が違う
4番目
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz
6番目
1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz
93デフォルトの名無しさん
2026/08/30(日) 17:51:20.98ID:VHTnCP+C2026/08/30(日) 18:03:05.38ID:OVNPbs7t
2026/08/30(日) 18:12:51.52ID:nFoXKPIw
96デフォルトの名無しさん
2026/08/30(日) 18:21:22.01ID:VHTnCP+C97デフォルトの名無しさん
2026/08/30(日) 18:27:01.52ID:VHTnCP+C >>95
4行目
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz 13 Woof FizzBuzzBuzz
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz
6行目
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz Chop Pop FizzBuzz
1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz
4行目
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz 13 Woof FizzBuzzBuzz
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz
6行目
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz Chop Pop FizzBuzz
1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz
98デフォルトの名無しさん
2026/08/30(日) 18:36:25.60ID:VHTnCP+C FizzBuzzのプログラムを書いてみるとデータと操作は分けた方がいんじゃないかという思いが強まるよな
なんでもかんでもオブジェクトにするのが旧オブジェクト指向だとすると
データ構造や言語機能の補間のためにオブジェクトを作るのが新オブジェクト指向なのかもしれない
なんでもかんでもオブジェクトにするのが旧オブジェクト指向だとすると
データ構造や言語機能の補間のためにオブジェクトを作るのが新オブジェクト指向なのかもしれない
9988
2026/08/30(日) 18:40:43.56ID:pFZkzj89 >>91
octaveに三項演算子があるか
ifが式で値を返せるようになってたらなあ
x = {b m}(1 + isempty(b)); ←こんなこと書きたくはなくて
x = isempty(b) ? m : b; ←こう書けたり
x = if isempty(b) then m else b; ←こう書けたらなあ!
x = ifelse(isempty(b), m, b); ←こうは書けるみたいだけど欲しいものとはまた違うし
それ以外は良い言語だお( ^ω^)
いっしょに行列グリグリしようず
octaveに三項演算子があるか
ifが式で値を返せるようになってたらなあ
x = {b m}(1 + isempty(b)); ←こんなこと書きたくはなくて
x = isempty(b) ? m : b; ←こう書けたり
x = if isempty(b) then m else b; ←こう書けたらなあ!
x = ifelse(isempty(b), m, b); ←こうは書けるみたいだけど欲しいものとはまた違うし
それ以外は良い言語だお( ^ω^)
いっしょに行列グリグリしようず
100デフォルトの名無しさん
2026/08/30(日) 18:45:49.35ID:0eUqQftJ101デフォルトの名無しさん
2026/08/30(日) 18:46:09.73ID:nFoXKPIw >>97
指摘ありがとう。
>>90の4行目で13がFizzにならず13がそのまま出力されていたのは、演算子優先順位の影響を見落とたbugだった。
>>89の16行目sub Woof{ 内式を ()でくくって明示しFix
join('', map {割り切れる($n, $_) and $h{$_} . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
↓ ↓
join('', map {(割り切れる($n, $_) and $h{$_}) . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
6行目で8がZingにならなかったのは、sub Pop_Whack_Zing_Chop で8を変換対象として「割り切れれば変換()」
の引数に指定漏れていた。8を追加しfix
>>89の18行目sub Pop_Whack_Zing_Chop{ 内修正
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11,13) or $_ } @_ };
↓
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,8,11,13) or $_ } @_ };
指摘ありがとう。
>>90の4行目で13がFizzにならず13がそのまま出力されていたのは、演算子優先順位の影響を見落とたbugだった。
>>89の16行目sub Woof{ 内式を ()でくくって明示しFix
join('', map {割り切れる($n, $_) and $h{$_} . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
↓ ↓
join('', map {(割り切れる($n, $_) and $h{$_}) . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
6行目で8がZingにならなかったのは、sub Pop_Whack_Zing_Chop で8を変換対象として「割り切れれば変換()」
の引数に指定漏れていた。8を追加しfix
>>89の18行目sub Pop_Whack_Zing_Chop{ 内修正
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11,13) or $_ } @_ };
↓
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,8,11,13) or $_ } @_ };
102デフォルトの名無しさん
2026/08/30(日) 21:49:58.37ID:1VBoMoHZ >>68
ウィック回転することでFizzBuzzの時間の流れから時間を消し去ることが可能
ウィック回転することでFizzBuzzの時間の流れから時間を消し去ることが可能
103デフォルトの名無しさん
2026/08/30(日) 23:13:56.38ID:nFoXKPIw >>90
スマソ、もう一個軽微なBugあった。
6行目
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
↓$_を $d に修正
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$d/g) } # $n =~ tr/$d//r
ただ、このBug $_でも解は合うんだよね。
上位関数から呼び出すとき、第二引数に $_ を渡すため、下位関数で引数 $d のかわりに $_ を参照してもたまたま動いちゃってたというだけ。
スマソ、もう一個軽微なBugあった。
6行目
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
↓$_を $d に修正
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$d/g) } # $n =~ tr/$d//r
ただ、このBug $_でも解は合うんだよね。
上位関数から呼び出すとき、第二引数に $_ を渡すため、下位関数で引数 $d のかわりに $_ を参照してもたまたま動いちゃってたというだけ。
104デフォルトの名無しさん
2026/08/30(日) 23:14:56.82ID:nFoXKPIw■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】侍ジャパン、韓国に快勝し優勝! 大会3連覇 西川先制弾、正木4戦連発、先発の高橋は7回1失点と好投 アジアCS [冬月記者★]
- 安倍晋三元首相の銅像建立 東郷神社で除幕式 昭恵さんら参列 福岡・福津 (産経) [少考さん★]
- 消費減税、効果小さい63% 財源、支援金説明必要85%-共同通信世論調査 ★2 [蚤の市★]
- 【音楽】スピッツのドラム・﨑山龍男、交通事故で救急搬送 「命に別状はないものの、全身を強く打っており」 [Ailuropoda melanoleuca★]
- 【実況】アジアプロ野球チャンピオンシップ・決勝 『日本 vs 韓国』 TBS系 19:00~ [冬月記者★]
- 【芸能】小泉今日子、クマ被害対策でドングリの木3000本植樹 「口だけではダメ」自ら行動し高まる“政治家転身”への期待★2 [冬月記者★]
- 今日床屋さん行ったんやけどハゲにされてたんやが🥺
- 【緊急】絶対にやるべきギャルゲーやノベルゲーを教えてほしい
- ぼっちざろっくの喜多郁代ちゃんの足を舐めたい
- 【悲惨】日本人の81%「日本は真面目に頑張って働いてる普通の人が十分報われない」 実際、年収330万円〜870万円の世帯で可処分所得が激減 [597533159]
- jcコテだけど受験への焦りが
- さっさと死ねよ馬鹿ネカマキモ脛毛👊😅👊🏡