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

多言語でforループを列挙していくスレ

1 :デフォルトの名無しさん:2018/10/30(火) 09:18:52.77 ID:sSPDfgXo.net
for(i=0;i<N;i++){} //C

257 :デフォルトの名無しさん:2019/03/02(土) 19:09:12.82 ID:FBcJNwx6.net
>>256
わざわざ普通のFizzBuzzありがとう。
もちろんそうかけます。

258 :デフォルトの名無しさん:2019/03/03(日) 02:00:43.47 ID:vKWKyL5A.net
>>255 同じ様にpython で書くなら、

for i in range(21):
 x=i%15
 if x==0 :
  print("FizzBuzz")
 elif x in (3,6,9,12) :
  print("Fizz")
 elif x in (5,10) :
  print("Buzz")
 else:
  print(i)

259 :デフォルトの名無しさん:2019/03/03(日) 21:24:43.54 ID:9zmHOox3.net
% Prolog

repeat.
repeat :- repeat.

?- see('foo.pl'),
repeat,(
at_end_of_stream(user_input),seen,!,fail;
read(X)).
X = (:- dynamic(年齢/2)) ;
X = 年齢(山田,32) ;
X = 年齢(山下,21) ;
false.

?- shell('cat foo.pl').
:- dynamic(年齢/2).

年齢(山田,32).
年齢(山下,21).

true.
?-

260 :デフォルトの名無しさん:2019/03/03(日) 23:36:56.32 ID:TlyfzziM.net
>>247
Haskellはそう言うのパターンマッチがあるんで楽。

main = mapM_ f [1..4]

f 1 = putStrLn "x = 1"
f 2 = putStrLn "x = 2"
f 3 = putStrLn "x = 3"
f x = putStrLn "x = others number"

output:

x = 1
x = 2
x = 3
x = others number

261 :デフォルトの名無しさん:2019/03/03(日) 23:51:31.92 ID:TlyfzziM.net
>>248
Pythonのifはelse ifを続けやすくしてるので、Cのswitch caseより複雑に条件分岐出来る分、強力。
(Haskellではガードに当たる)

262 :デフォルトの名無しさん:2019/03/04(月) 00:10:08.73 ID:TibQyUgX.net
>>260 基本的には単なる辞書変換ではない。
マッチしたら処理(複数の)が実行できなければならない。

263 :デフォルトの名無しさん:2019/03/04(月) 00:55:03.35 ID:CTqL7+CV.net
>>262
よく分からんが、各パターンで複数の事させればいいの?
(と言ってもdo形式をモナド形式で書けば1行になるが)
かえ
main = mapM_ f [1..4]

a = 3
b = 2

f 1 = do
let c = a + b
print c
f 2 = do
let c = a - b
print c
f 3 = do
let c = a * b
print c
f x = return (a `div` b) >>= print

264 :デフォルトの名無しさん:2019/03/04(月) 01:11:16.72 ID:rLTN1z0Z.net
短くしてみた >>260

main = mapM_ putStrLn $ map f [1..4]
where f = ¥x -> if x<=3 then "x = " ++ show x else "x = other number"

265 :デフォルトの名無しさん:2019/03/04(月) 01:27:26.35 ID:rLTN1z0Z.net
>>262
―Haskell
main = mapM_ putStrLn $ map f ['b','a','s','i','c']
f x = case x of
'a' -> "aの場合"
'b' -> "bの場合"
otherwise -> "それ以外"

266 :デフォルトの名無しさん:2019/03/04(月) 01:39:28.31 ID:CTqL7+CV.net
HaskellのFizzBizz

main = mapM_ (putStrLn.fizbiz) [1..20]

fizbiz x | x `mod` 15 == 0 = "FizzBizz"
fizbiz x | x `mod` 3 == 0 = "Fizz"
fizbiz x | x `mod` 5 == 0 = "Bizz"
fizbiz x = show x

267 :デフォルトの名無しさん:2019/03/04(月) 02:09:33.72 ID:CTqL7+CV.net
>>264
行数が少ないだけで、意図が分かりにくい。
mapが無駄。

main = mapM_ (putStrLn.f) [1..4]

f x | x <= 3 = show x
f x = "others number"

そもそも命題がCのswitch相当は他の言語でどうしてる?なので短くするのが命題では無い。
(if elseでは無いのに注意)

268 :デフォルトの名無しさん:2019/03/04(月) 14:43:44.85 ID:/O719wMt.net
kotlin
when (variable) { // レシーバーを指定しないこともできる
is Int -> println("Int")
is Long -> {
// 複数行は中かっこで囲む。breakは要らない。
println(variable) // println(Long)の呼び出し。スマートキャストも効く。
}
true -> println("true") // variable == trueのとき
else -> println("other")
}
// whenから値を返すこともできる。(printlnはUnitを返すのでこの例では意味がない)

269 :デフォルトの名無しさん:2019/03/05(火) 06:16:21.06 ID:B2gBj45S.net
まず、cのswitch caseのコード例がほしい

270 :デフォルトの名無しさん:2019/03/05(火) 08:28:26.95 ID:Bb8UPpz3.net
めくらかな

271 :デフォルトの名無しさん:2019/03/05(火) 08:43:47.22 ID:B2gBj45S.net
>>247はコード例とはいわんでしょう

272 :デフォルトの名無しさん:2019/03/05(火) 16:39:39.29 ID:iMy1mZDl.net
勉強したてのやつがマウント取るスレになってね?

273 :デフォルトの名無しさん:2019/03/05(火) 21:38:51.56 ID:YjygbClv.net
>>259 Prolog

for(M,M,M) :- !.
for(N,N,M).
for(N,X,M) :-
次の数は(N,M,_次の数),
for(_次の数,X,M).

次の数は(N,M,_次の数) :-
N < M,
_次の数 is N + 1.
次の数は(N,M,_次の数) :-
N > M,
_次の数 is N - 1.

?- for(3,N,1),writef('%w\n',[N]),N = 1.
3
2
1
true.

?-

274 :デフォルトの名無しさん:2019/03/06(水) 08:08:24.93 ID:fBh61pOJ.net
>>273 Prolog _目標をforループの中に書く。copy_term/2とは何か?

for(M,M,M,_目標) :- !,_目標.
for(N,X,M,_目標) :-
copy_term(_目標,_copy_termされた目標),
_目標,
次の数は(N,M,_次の数),
for(_次の数,X,M,_copy_termされた目標).

次の数は(N,M,_次の数) :-
N < M,
_次の数 is N + 1.
次の数は(N,M,_次の数) :-
N > M,
_次の数 is N - 1.

?- for(3,N,1,writef('%w\n',[N])).
3
2
1
true.

?-

275 :デフォルトの名無しさん:2019/04/06(土) 12:53:39.01 ID:Mn11yHOy.net
変数のインクリメントはどうやる?

276 :デフォルトの名無しさん:2019/04/06(土) 13:10:45.56 ID:hBfZV6UD.net
python は、++ が使えないから
n += 1

277 :デフォルトの名無しさん:2019/04/06(土) 20:28:07.55 ID:LfoN0yho.net
Haskellは関数型言語なので、基本変数の書き換えが出来ない。
(一応IORefとかで書き換え可能だが)

基本はインクリメントされる変数が最終的にどんな働きをするのかによって、
同じ動きになる様に無限リスト使ったり、GUIなら外部とのやりとりそのものも含めて参照透明性保ったりで対応する。
(Haskellの元になった圏論自体が数では無く構造の抽象化を目的にした数学なので)

同じ操作をしたら同じ結果が返ってくる(バグの無い)アプリをユーザーは求める。
これは参照透明性のあるアプリと言える。

参照透明性のある関数を組み合わせて参照透明性のあるアプリ(バグの無いアプリ)は出来そうだが、
参照透明性の無い関数を使って参照透明性のあるアプリを作れるかは分からない。
これが今までバグの無いアプリは無いと言われた根拠ではと考えている。

278 :デフォルトの名無しさん:2019/04/06(土) 22:44:33.30 ID:qQhidKgX.net
> 同じ操作をしたら同じ結果が返ってくる(バグの無い)アプリをユーザーは求める。

そんな一般化はできない。反例としてはランダム要素を含むゲームなど。
同じ操作をしたら同じ結果が返ってくる(バグの無い)アプリを求めるユーザーがいる、なら正しい。

279 :デフォルトの名無しさん:2019/04/06(土) 23:42:02.81 ID:LfoN0yho.net
そういう反論がある事は考えていたし、実際あなたの言う通り。

屁理屈述べさせて頂くと、圏論は上で書いた通り構造に注目した学問なので、中の値に言及しない。
(なので厳密な数学が硬い数学なら、圏論は柔らかい数学で、レベルによって同じと見なしたり違うと見なしたりする)

入出力と同様ランダムも副作用とされるし、硬い数学ならそれはその通り。
柔らかい数学である圏論のレベルの場合は構造が同じなら、副作用も変数も同じと見なす。

f x = x

f = getLine >>= \x -> read x

f = randomRIO(1,3) >>= \x -> x

上記はxを返すという意味で構造的に同じと見なせる。
コード上で定義されているか、入力かランダムか実体やタイミングなどを除けば同じ入力があれば同じ値を返す。

そんな訳で、ランダムも含めて参照透明性があると言うと、想定外のランダム値は出ない。それに起因したバグは無いってのがまあ、屁理屈になるかな。
パターンマッチで拾いきれないパターンがあるとエラーになったり、一部の論理エラー(文法的に正しいけど、動作上バグ)も弾くのは強力。

280 :デフォルトの名無しさん:2019/04/07(日) 00:05:26.46 ID:DafnpbK7.net
圏論だ参照透明性だと出て来て難しそうに見えるけど、Haskellの裏でそう言う論理に基づいて処理系が動いてるってだけで、
プログラマーは意識する必要はない。
(必要無いのに知らなきゃダメみたいな雰囲気作ってる純粋関数型言語信者がプログラマーからHaskell触る機会を奪ってるだけ)

もっと言えば純粋関数型言語だからとか、関数型言語だからと肩肘はる必要もない。

型に気をつければ動く算数・数学のエミュレータみたいなもの程度で良い。
変な言語だけど、そう言う言語というだけの意識で良い。

281 :あめ :2019/04/07(日) 03:42:18.98 ID:r06bl0Nm.net
>>278
ランダム要素を含むゲームがどうして同じ結果を返せないの?

反例としてはサイコロを振り1が出たら勝つゲーム
サイコロを降ると勝敗を返す

282 :デフォルトの名無しさん:2019/04/20(土) 08:51:05.57 ID:taiWhU7u.net
変数のインクリメント
Rの場合
a <- a+1

283 :デフォルトの名無しさん:2019/04/27(土) 13:02:20.94 ID:ayOw6WNl.net
>>275 python numpyなら配列要素のインクリメントもできる。

import numpy as np
n = np.array([-1,0,1,2])
n += 1
print(n)
# [0 1 2 3]

284 :デフォルトの名無しさん:2019/05/01(水) 07:03:02.59 ID:D4jmMExL.net
輪廻転生

285 :デフォルトの名無しさん:2019/05/01(水) 15:41:33.68 ID:zxNIeS7i.net
FOR I=I TO I
NEXT

286 :デフォルトの名無しさん:2019/05/08(水) 18:38:06.96 ID:qUpXgvbZ.net
r.
r :- r.

287 :デフォルトの名無しさん:2019/05/08(水) 18:41:10.44 ID:qUpXgvbZ.net
r.
r :- r.

288 :デフォルトの名無しさん:2019/05/19(日) 10:10:24.78 ID:b1S+2jBu.net
>>80
> 0からNまで繰り返すようなことは
> while使ってiをカウントしていくしか無い

そんな事はない。python では カウンター付き for ループ を enumerate で作れる

for count , x in enumerate('アイウエオ') :
 print(count,x)

'''
0 ア
1 イ
2 ウ
3 エ
4 オ
'''

289 :デフォルトの名無しさん:2019/05/19(日) 11:24:53.27 ID:sA5/dcdL.net
for inじゃん。>>80よく読め

290 :デフォルトの名無しさん:2019/05/19(日) 15:00:07.17 ID:Ep+P2jjw.net
>>289 知らんがな、自分がリンクを切ってるから話の流れを断ち切って勝手な話をしてるんだろ。
前後関係が一切わからん。

291 :デフォルトの名無しさん:2019/05/21(火) 23:16:40.30 ID:5dr0Nkwr.net
>>290
ばーか

292 :デフォルトの名無しさん:2019/06/04(火) 09:38:40.06 ID:/ArpXH0n.net
>>291 可愛い坊やだね❤❗

293 :デフォルトの名無しさん:2019/06/04(火) 09:40:18.55 ID:/ArpXH0n.net
>>289 0からN までのカウントをfor in で出来てるじゃん。
while なんか使わないよ。

294 :デフォルトの名無しさん:2019/06/04(火) 13:02:22.29 ID:XXr8i2SB.net
for inじゃん。>>80よく読め

295 :デフォルトの名無しさん:2019/06/04(火) 15:35:30.18 ID:oF2K+2cj.net
for in だと言ってるじゃん、よく読め、可愛いな。

296 :デフォルトの名無しさん:2019/06/04(火) 15:56:57.14 ID:XXr8i2SB.net
289 デフォルトの名無しさん sage 2019/05/19(日) 11:24:53.27 ID:sA5/dcdL
for inじゃん。>>80よく読め

293 デフォルトの名無しさん 2019/06/04(火) 09:40:18.55 ID:/ArpXH0n
>>289 0からN までのカウントをfor in で出来てるじゃん。
while なんか使わないよ。

294 デフォルトの名無しさん sage 2019/06/04(火) 13:02:22.29 ID:XXr8i2SB
for inじゃん。>>80よく読め

295 デフォルトの名無しさん 2019/06/04(火) 15:35:30.18 ID:oF2K+2cj
for in だと言ってるじゃん、よく読め、可愛いな。


池沼かな?

297 :デフォルトの名無しさん:2019/06/05(水) 05:12:23.73 ID:H9DP6xbZ.net
cのforはアルゴル系の言語に対して失礼なネーミングだと思う
アルゴル系の言語側は怒らなかったのか

298 :デフォルトの名無しさん:2019/06/18(火) 22:19:14.40 ID:gRhwyB3T.net
for ($ARGV[0]){
 our $modulo
  = Xxx ? Xxx
  : Xxx ? Xxx
  : Xxx ? Xxx
  :     Xxx
  ;
}

299 :デフォルトの名無しさん:2019/10/27(日) 01:49:49.46 ID:hlM+06in.net
>>288
Swiftでもできる。
最近仕事でC#使い始めたけど、iまで一々int明記せにゃならんし、レンジ演算子も使えんし配列は固定長で拡張処理が必要だし...

300 :デフォルトの名無しさん:2019/10/27(日) 15:21:19.47 ID:Vc6lc8Xn.net
blawn

for i = 1, i < N, i = i + 1
(
)

301 :デフォルトの名無しさん:2019/11/02(土) 14:47:17.10 ID:xs6Yg1eH.net
vba

for i = 1 to n
next

302 :デフォルトの名無しさん:2019/11/10(日) 11:51:51.32 ID:uFnVWU5E.net
Crystal

0.upto(N-1) do |i|
end

303 :デフォルトの名無しさん:2019/11/15(金) 23:49:23.02 ID:HwWGhxcu.net
>>299
Enumerable.Rangeとか使えば出来るような
LINQ使ったらその辺のことは大体出来るんじゃない?
forループ書く方がシンプルな場合もあるから内包表記みたいな感じで一気にリストや配列作るときにしか使わないけど

304 :デフォルトの名無しさん:2019/11/19(火) 07:01:10.79 ID:uwwA9qTH.net
Cyan

N.times^(i):say i

305 :デフォルトの名無しさん:2020/10/03(土) 23:26:05.17 ID:7NrhvCrT.net
Powershell
for ($i=0; $i -lt $n; $i++) { }


foreachのが高速
foreach ($user in $users){}

306 :デフォルトの名無しさん:2021/02/08(月) 17:04:43.18 ID:FcZ190S6.net
一番高機能なのはFortranだろうけど、あれ使いこなせてる人いるのだろうか

70 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★