5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

帝王にifなどいらぬ!

1 :デフォルトの名無しさん:2006/01/19(木) 16:30:19
こ、こんなに悲しいのなら・・・苦しいのなら・・・ifなどいらぬ!
オレはその時からifを捨てた!
いや、自虐プログラマの血が目覚めたのだ!

というわけで、便利なifをあえて捨てたプログラミングを語ろう。

2 :デフォルトの名無しさん:2006/01/19(木) 16:34:53
return is_fool( _1 ) ? EXIT_FAILURE : EXIT_SUCCESS;


3 :デフォルトの名無しさん:2006/01/19(木) 16:34:59
3項演算子だけで十分ってこと?

4 :デフォルトの名無しさん:2006/01/19(木) 16:51:01
int main()
{
return 0;
}

5 :デフォルトの名無しさん:2006/01/19(木) 17:03:44
inline int max(int x, int y)
{
    int a[] = {x, y};
    return a[x < y];
}

6 :デフォルトの名無しさん:2006/01/19(木) 17:29:44
ifとswitchと?演算子無しでプログラムを作ろう。
オレはヤダ

7 :デフォルトの名無しさん:2006/01/19(木) 17:32:06
どっちかというならswitchいらないかな

8 :デフォルトの名無しさん:2006/01/19(木) 17:33:17
何が帝王なんだろう

9 :デフォルトの名無しさん:2006/01/19(木) 19:41:44
その部分だけインラインアセンブラでcmp使ったり

10 :デフォルトの名無しさん:2006/01/19(木) 19:54:31
Perlでif使わないで3項演算子だけでプログラム書いたなあ

11 :デフォルトの名無しさん:2006/01/19(木) 20:16:14
ifを使わない人=聖帝
ifを使う人=下郎
else ifを使う人=子供

12 :デフォルトの名無しさん:2006/01/19(木) 21:51:57
while (x == y) { // if
    hoge();
    break;
}
while (x != y) { // else
    fuga();
    break;
}

こんなん?

13 :デフォルトの名無しさん:2006/01/20(金) 00:56:49
このスレ言語指定してないよな・・・

Perlならunlessで決まり!


14 :デフォルトの名無しさん:2006/01/20(金) 08:46:48
ifってなんですか?
http://pc8.2ch.net/test/read.cgi/tech/1036013915/l50

15 :デフォルトの名無しさん:2006/01/20(金) 11:02:52
&& と || で代用。

16 :デフォルトの名無しさん:2006/01/20(金) 21:04:32
お前らアフォか。
ifなど要らぬってことは条件分岐禁止ってことだ。
バグの80%は条件分岐に起因するという。
条件分岐を廃したソリッド・プログラミングを目指すんだ!

17 :デフォルトの名無しさん:2006/01/21(土) 00:53:51
if(A)B else if(C)D else E;

A&&B||C&&D||E
で代用できるしな。

18 :デフォルトの名無しさん:2006/01/21(土) 01:34:08
>>17
それってコンパイラの実装によりそうな気がするんだが、
途中で以降の処理を中断とかってできるん?

あと、BとCが副作用を起こさないメソッドでないといけない気もする。

19 :デフォルトの名無しさん:2006/01/21(土) 03:09:04
>>18
よりません。

20 :デフォルトの名無しさん:2006/01/21(土) 03:55:27
>>17
Bが偽と評価されるようなコードだと使えないよ。

21 :デフォルトの名無しさん:2006/01/21(土) 08:31:00
カンマ演算子使えば使える

22 :デフォルトの名無しさん:2006/01/21(土) 11:56:15
>>20
Bの最後で1を返せばいいだけだろ。

23 :デフォルトの名無しさん:2006/01/21(土) 13:17:28
>>22
>>21
つまり、
A && (B, 1) || C && (D, 1) || E;
それも手なんだが、関数ポインタ配列を使えば条件分岐(含む&&、||)一切無しのコーディングができるな。

24 :デフォルトの名無しさん:2006/01/21(土) 14:08:44
void (*hoge[])()={hoge1,hoge2};
hoge[a==b]();

ってこと?

25 :デフォルトの名無しさん:2006/01/21(土) 19:46:01
あんまり関係ないと思うけど、
A < B の時は1、 B > Aは0を返す関数f(A, B)って1行で書けます?
もちろんif等のbool値による分岐は無しで。

26 :デフォルトの名無しさん:2006/01/21(土) 20:23:29
int f(int A, int B)
{
    return A < B;
}


function f(A, B) {
    return return (A < B) | 0;
}

27 :デフォルトの名無しさん:2006/01/21(土) 20:24:44
returnがダブってた...

function f(A, B) {
    return (A < B) | 0;
}

28 :デフォルトの名無しさん:2006/01/21(土) 22:18:43
>>25
A < B → 1
B > A == A < B → 0 ???

>>27
何がしたい。 0とのorは何の意味もないぞ。

29 :デフォルトの名無しさん:2006/01/21(土) 22:51:23
>>28
//ヒント:
function f(A, B) {
return {"true":1, "false":0}[A < B];
}

30 :デフォルトの名無しさん:2006/01/22(日) 03:35:15
>>29
それはなんのヒント? つーか、>28に書かれていることが理解できている?

31 :デフォルトの名無しさん:2006/01/22(日) 10:55:01
A < Bの結果はboolだからintになおすために|0してんじゃないの?

32 :デフォルトの名無しさん:2006/01/22(日) 11:58:43
さっきから必死に言い訳している香具師、痛いってば。
boolからintにするためにor? どこの言語だそれ。

33 :デフォルトの名無しさん:2006/01/22(日) 11:59:56
それはいいとして、結局>25は何をしたかったんだろう。
もしかしたら、A < Bは1、A > Bは0と言いたかったのか?
#それでもA == Bはどうするって問題が残るが。

34 :デフォルトの名無しさん:2006/01/22(日) 12:29:38
>>31
正解
BooleanをNumberに変換する定石

35 :25:2006/01/22(日) 19:03:35
すみません。間違えてました。
A < B なら1、B >= Aなら0でした。

36 :デフォルトの名無しさん:2006/01/22(日) 19:05:31
A < B ? 1 : 0;

37 :デフォルトの名無しさん:2006/01/22(日) 22:35:41
>>32
どうみてもJavascriptです。
本当にありがとうございました。

38 :デフォルトの名無しさん:2006/01/26(木) 00:43:31
おい下郎ども
条件分岐せずに素数を計算するプログラム書いてみろ

39 :デフォルトの名無しさん:2006/01/26(木) 18:16:51
>>38
#include <stdio.h>
#include <stdlib.h>
int main(void){long i,j,n,*p;
scanf("%ld",&n);p=(long*)calloc(n+1,sizeof(long));
for(i=2;i<=n;i++)p[i]=i;for(i=2;i<(n/2+1);i++)
for(j=i*2;j<=n;j+=i)p[j]=0;for(j=0,i=2;i<=n;j+=p[i++]!=0)p[j]=p[i];
for(i=0;i<j;i++)printf("%ld\n",p[i]);free(p);return 0;}

40 :デフォルトの名無しさん:2006/01/26(木) 23:37:08
ヒィィ

41 :デフォルトの名無しさん:2006/02/11(土) 20:15:31
おいお前ら。FCの名作ソフト「いっき」のオンライン対戦するぞ!

http://game.coden.ntt.com/games/ikki.html

King of Wands
http://game.coden.ntt.com/kingofwands/

42 :デフォルトの名無しさん:2006/02/11(土) 20:47:30
gotoを使わずにgotoしてる例なら見た事あるよ。

while(false){
  処理
  if (エラー){
    break;
  }
  処理
  if (エラー){
    break;
  }
  処理
}
終了処理

こんなの。
素直にgoto使えっての。


43 :デフォルトの名無しさん:2006/02/11(土) 21:05:49
>>42
switch (0) {
case 0:
...;
if (...) {
break;
}
case 1:
...;
if (...) {
break;
}
case 2:
...;
if (...) {
break;
}
default:
...;
}
...;
/*なんてのも普通にある*/
/*#デバッグのときはswitch(1)とか*/

44 :デフォルトの名無しさん:2006/02/11(土) 23:17:59
帝王に必要なのはこれだけだ。

  > ポインタをインクリメント 
  < ポインタをデクリメント 
  + ポインタが示すメモリ位置のデータをインクリメント 
  + ポインタが示すメモリ位置のデータをデクリメント 
  . ポインタが示すメモリ位置のデータを出力 
  , ポインタが示すメモリ位置のデータに入力 
  [ ポインタが示すメモリ位置のデータがヌルなら対応する]までジャンプ 
  ] ポインタが示すメモリ位置のデータがヌルじゃないなら対応する[までジャンプ 


45 :デフォルトの名無しさん:2006/02/11(土) 23:32:41
>>44
こちらへお越し下さい
http://pc8.2ch.net/test/read.cgi/tech/1036013915/l50

46 :デフォルトの名無しさん:2006/02/12(日) 05:52:32
なんだか解らんが、
&&と||があればifなんか無くても ?: で全て済むだろ。

と、ログ全く読まずにレス。

47 :デフォルトの名無しさん:2006/02/12(日) 09:58:41
帝王はif(条件分岐)など使わずにmax関数を作る。

inline max(int a, int b)
{
  return ((a^b)&((a-b)>>31))^a;
}

48 :デフォルトの名無しさん:2006/02/12(日) 10:01:20
>>39
ループ判定で条件分岐してるじゃん

49 :デフォルトの名無しさん:2006/02/12(日) 12:21:13
どうせなら
for while if ? switch 無しで

50 :デフォルトの名無しさん:2006/02/12(日) 16:10:27
>>49
それを言うなら、&&や||のショートサーキット評価だって条件分岐だ


51 :デフォルトの名無しさん:2006/02/19(日) 11:58:27
プログラムを構成する最低限絶対に必要なものは条件付転送。
これさえあればプログラムは全て表現可能になる。

条件は無条件を含むし、転送は相手先がプログラムカウンタを
含むから、条件(&無条件)分岐は必ず含まれることになる。

52 :デフォルトの名無しさん:2006/02/21(火) 22:42:11
cmovがあればjmpとかcallとかはいりませんか。

53 :デフォルトの名無しさん:2006/02/22(水) 16:41:36
>51 が言うには、それらはプログラムカウンタ(call の場合はリンクレジスタも)への無条件転送。




・・・条件設定命令はいらんのか? >51

54 :デフォルトの名無しさん:2006/02/23(木) 20:06:05
>>53
条件は転送の結果でもあるし、フラグを表現する領域への転送としても表現できる。

55 :デフォルトの名無しさん:2006/02/24(金) 11:50:16
>>54
>>>53
> 条件は転送の結果でもあるし、フラグを表現する領域への転送としても表現できる。
後者は分かるが、前者は、そんな副作用を突然持ち出されても困る。

だったら、条件付転送だって、演算結果を転送する命令でしかないだろう。
ということは条件付転送なんていらぬのだ。演算結果を転送する命令があればよい。


56 :デフォルトの名無しさん:2006/02/24(金) 16:28:08
演算は条件付転送を使って書くものだから、条件付転送なんて
いらんといわれても困る。

それに条件判断するところは一番単純化すれば転送の結果が
ゼロか1かだろう。

転送の結果のゼロか1かをフラグとして使えないなら条件判断が
否定されることになる。

57 :デフォルトの名無しさん:2006/02/24(金) 22:57:36
いーや、条件判断も演算だ。

58 :デフォルトの名無しさん:2006/02/25(土) 00:03:28
話が抽象的すぎてほとんど意味がなくなってる気がする。
たとえばデクリメントを条件付き転送で実現するにはどうするんだ?
これができればほかのすべての演算ができそうだが、方法を思いつかない。

lea r0,(r0-1) if always とか・・・って反則だ。

59 :デフォルトの名無しさん:2006/02/25(土) 00:26:47
load r0,0 if r0==1
load r0,1 if r0==2
...

とかすればいいのか。馬鹿だ俺。

60 :デフォルトの名無しさん:2006/02/25(土) 10:15:04
もとをただせばフリップフッロプでおk

61 :デフォルトの名無しさん:2006/02/25(土) 13:20:26
>>58
ネタスレでネタを展開してるのに意味を問うなよw

62 :デフォルトの名無しさん :2006/03/13(月) 11:41:54
>>1は、北斗のサウザーさんですね
媚びぬ退かぬ顧みぬなんて言ってる人が
語ろうなんて言っちゃだめ

63 :デフォルトの名無しさん:2006/03/13(月) 12:46:56
よく、コントロールのboolean型のプロパティで使うよね。
変数aとbが同じ値なら表示、違う値なら非表示

EditBox.Visible = (a = b)


64 :デフォルトの名無しさん:2006/03/13(月) 13:04:01
条件付転送のみと言っても記憶媒体に演算ユニットをマッピングすればって条件付だとちゃんと言わなきゃダメでしょ

65 :デフォルトの名無しさん:2006/03/13(月) 14:41:00
分岐ひとつにつき小人さん一人お願いします

66 :デフォルトの名無しさん:2006/03/13(月) 18:10:03
結局完璧なのは>>47だけか。

67 :デフォルトの名無しさん:2006/03/13(月) 22:41:41
帝王にifはいらねって、if文じゃなくて、構造化プログラミングでいう、分岐構造の
ことじゃねぇ?だから、分岐してるプログラムはifつかってるのと一緒。


68 :デフォルトの名無しさん:2006/03/14(火) 02:25:40
もしああならこう。もしこうならああ。
こんな後ろ向きな考えでどうするか!


69 :デフォルトの名無しさん:2006/03/15(水) 10:59:15
DSP使えば良いじゃん

70 :デフォルトの名無しさん:2006/03/17(金) 20:12:08
// if, 3項演算子, その他の制御構文を使わずに strcmp を実装する
int cond_lt (int a, int b) {
 return ((a - b) >> 31) & 1;
}
int cond_zero (int a) {
 return (~(a ^ -a) >> 31) & 1;
}
int zero (const char* s1, const char* s2) {
 return 0;
}
int one (const char* s1, const char* s2) {
 return 1;
}
int minus_one (const char* s1, const char* s2) {
 return -1;
}
int strcmp (const char* s1, const char* s2) {
 int a = *s1 & 0xff;
 int b = *s2 & 0xff;
 int (*table[8]) (const char*, const char*) = {
  strcmp, zero, minus_one, minus_one, one,
  0, 0, 0   // この3パターンは有り得ない
 };
 return (*table[
  (cond_zero(a)) |
  (cond_lt(a,b) << 1) |
  (cond_lt(b,a) << 2)]) (s1 + 1, s2 + 1);
}


71 :デフォルトの名無しさん:2006/03/17(金) 20:32:25
>>70
ちょっと感動した。
やはり、関数呼び出しも制御構文だな。

72 :デフォルトの名無しさん:2006/03/17(金) 23:08:51
// f(f(f(f(...f(x)...)))) を計算する (fをn回繰り返す)
//---------------------------------------
// 型定義&プロトタイプ宣言
typedef int data_t;          // 任意のデータ型
typedef data_t (*func_t) (data_t); // 一引数関数
data_t call_n_times (int n, func_t f, data_t x);
//---------------------------------------
// 関数定義
int cond_lt (int a, int b) { return ((a-b)>>31)&1; }
data_t call0 (int n, func_t f, data_t x) { return x; }
data_t call1 (int n, func_t f, data_t x) { return f (x); }
data_t call2ormore (int n, func_t f, data_t x) {
 return call_n_times (n/2, f, call_n_times (n-n/2, f, x));
}
data_t call_n_times (int n, func_t f, data_t x) {
 data_t (*table[3]) (int, func_t, data_t) = {
  call0, call1, call2ormore
 };
 return (*table[cond_lt(0,n) + cond_lt(1,n)]) (n, f, x);
}
//-----------------------------------
// 使い方サンプル:1〜100000を表示する
#include <stdio.h>

data_t print_and_increment (data_t x) {
 printf ("%d\n", x); return x+1; 
}
int main (int argc, char** argv) {
 call_n_times (100000, print_and_increment, 1);
 return 0; 
}

73 :デフォルトの名無しさん:2006/03/17(金) 23:20:50
>>71
関数呼び出しを禁止されるとCでは何も出来ないのですが・・・

74 :デフォルトの名無しさん:2006/03/18(土) 00:07:23
main()関数が呼べません ><

75 :デフォルトの名無しさん:2006/03/18(土) 16:49:33
>>70>>72
へー(゚Д゚)
仕事何やってる人なの?

76 :デフォルトの名無しさん:2006/03/18(土) 19:13:01
>>75
帝王ですお

77 :デフォルトの名無しさん:2006/03/18(土) 19:23:40
なぜ if を使わないのか?
そこに if がないからだ

78 :http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 20:06:30
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

79 :デフォルトの名無しさん:2006/03/25(土) 06:02:57
制御構文は読みにくくなるから使うの禁止

80 :デフォルトの名無しさん:2006/03/25(土) 10:14:38
頭のおかしい人がいるスレはココですか?

81 :デフォルトの名無しさん:2006/03/25(土) 12:44:19
if(織田信長 != 本能寺で最期)

82 :デフォルトの名無しさん:2006/03/25(土) 12:56:54
if()に相当するメソッド,クラスを
作れば
確かにifはいらなくなるw


83 :デフォルトの名無しさん:2006/03/25(土) 15:24:46
>>82
それ実装してみ

84 :デフォルトの名無しさん:2006/03/25(土) 18:27:11
馬鹿言語スモールトークです。

85 :デフォルトの名無しさん:2006/03/25(土) 19:54:10
>>80
いいえ、ここはマゾの集まるスレです。

86 :デフォルトの名無しさん:2006/03/25(土) 23:06:43
条件分岐一度も使わない関数ライブラリ作らね?
>>86
なんのために?

87 :デフォルトの名無しさん:2006/03/25(土) 23:21:28
>>86無限ループワロタ

88 :デフォルトの名無しさん:2006/03/26(日) 17:09:46
>>86
>条件分岐一度も使わない関数ライブラリ作らね?
> >>86
> なんのために?

警告 : 実行されないコードです
> なんのために?

89 :デフォルトの名無しさん:2006/04/06(木) 18:02:44
while(TRUE){
>>86
なんのために?
}

90 :デフォルトの名無しさん:2006/05/11(木) 20:51:28
い・・・ifさん・・・
もう一度ぬくもりを・・・

91 :デフォルトの名無しさん:2006/05/12(金) 23:01:34
そういえば、ifすら構文にない言語なかったけ?

92 :デフォルトの名無しさん:2006/05/13(土) 00:22:14
がらくた言語スモールトークです。


93 :デフォルトの名無しさん:2006/05/15(月) 15:16:38
>>91
>>14


94 :デフォルトの名無しさん:2006/08/13(日) 19:52:51
 

95 :デフォルトの名無しさん:2006/08/13(日) 19:53:26
 

96 :デフォルトの名無しさん:2006/08/30(水) 11:42:49
>>42
> while(false){
> }
> 終了処理

いきなり終了してるじゃん。

do { ... } while (0);
の間違いか?

97 :デフォルトの名無しさん:2006/08/31(木) 15:37:33
>>1
ifを使ってない掲示板に書き込むべき

98 :test:2006/11/26(日) 21:59:59
<![CDATA[a]]>

99 :デフォルトの名無しさん:2006/12/02(土) 01:17:18
>>91
こんな言語どう?

 10 VALUE IS 20
 20 PRINT "20"
 30 IS VALUE 20
 40 COME FROM 90
 50 PRINT "40"
 60 COME FROM 20
 70 PRINT "60"
 80 BECAUSE OF 30
 90 PRINT "80"

で、実行結果が

 20->60->80->40->60->80->...

となるの。結果から遡ってフロー記述を行うタイムマシン型プログラミング。


100 :デフォルトの名無しさん:2006/12/02(土) 13:14:13
>>99
それ、ifって言ってないだけでif的な機能全開じゃねぇ?

101 :デフォルトの名無しさん:2006/12/02(土) 13:42:01
IFじゃなくて条件判定フローを意識させること自体だめなのか。
なら、全部「AはBに依存する」宣言型パターンマッチ構造にして、
ループは再帰で書けば追放できるか?

FOO(N): BAR; FOO(n -1);
FOO(0): 0

要するにPrologか。


102 :デフォルトの名無しさん:2006/12/04(月) 03:55:00
ifは使わずすべてswitchで表現

103 :デフォルトの名無しさん:2006/12/04(月) 04:09:05
main(int argc, char**argv){argc=1/(argc-1), puts("パラメータをいれないで"); return 0}


104 :デフォルトの名無しさん:2006/12/09(土) 16:49:38
オブジェクト指向徹底するとif文がなくなるそうですがそれ本当に見やすい?


105 :デフォルトの名無しさん:2006/12/09(土) 16:55:48 ?2BP(294)
>>104
そんな話、だれにきいたんだよ。

106 :デフォルトの名無しさん:2006/12/09(土) 17:34:32
まぁ、確かにif文が減る場所はあるけどな。

107 :デフォルトの名無しさん:2006/12/09(土) 19:59:54
>>105
たぶんifTrue: とかのことかと思われ

108 :デフォルトの名無しさん:2006/12/09(土) 20:01:05
type_traints
enable_if
はOKですか?

109 :デフォルトの名無しさん:2006/12/10(日) 02:05:39
オレ的にはプログラマ終了だな・・・

110 :デフォルトの名無しさん:2006/12/13(水) 21:33:46
>>104
「リファクタリング」とか読むと、
if文なくしていくように思えるかも。

111 :デフォルトの名無しさん:2006/12/13(水) 22:59:48
If I were a swan, I'd be gone.
If I were a train, I'd be late.
And if I were a good man, I'd talk with you more often than I do.

112 :デフォルトの名無しさん:2006/12/14(木) 14:07:59
Why do you say that?


23 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)