[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2ch.scのread.cgiへ]
Update time : 06/09 08:00 / Filesize : 265 KB / Number-of Response : 972
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

次世代言語議論スレ[Go Rust Kotlin Scala]第4世代



1 名前:デフォルトの名無しさん mailto:sage [2017/04/20(木) 04:43:27.12 ID:mNwXvrXv.net]
いざ、語ろうぞ。

スレタイ超過のため、一部省略。
Go, Erlang, Kotlin, etcもウェルカム。
Haskellは協議により次世代失格になりました

前スレ
次世代言語議論スレ[Go Rust Haskell Scala]第3世代
echo.2ch.net/test/read.cgi/tech/1488608741/

249 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 00:35:03.84 ID:9tv813Aq.net]
あ、argsをargaってタイポしてた。。。
LinuxにHaskell入れたばかりなのでPCで実行確認してiPhoneで書き込んでるんで、コピペでコンパイル出来ない時はどこかタイポあると思う。

250 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 00:50:29.93 ID:9tv813Aq.net]
次世代言語勢に参戦して貰わんとだから、第二形態は明日の夜発表って感じで良いかな。
一応、第三形態までの予定。
明後日から夜勤なんで、第三形態どうすっかな。

251 名前: mailto:sage [2017/05/06(土) 02:06:36.33 ID:BE072L/9.net]
>>236
そうなのかなぁ。
例えばそれぞれのどんな例からシンプルさがわかる?
後学のため教えて欲しい

252 名前: mailto:sage [2017/05/06(土) 02:11:17.59 ID:BE072L/9.net]
>>241
Go版、マシどころか疎にしておいたところ密にされてしまったな。
ノブのないドア、ノブはあるけどラッチのないドア
実現する術がなくなったね。

With Withなんて気色悪い無理に継承関係を作ったような型作るくらいならもう継承とか全部捨てたほうがマシ。
もうちょっと真面目にやって。

253 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 03:50:07.06 ID:oP2bFz9u.net]
Kotlinになれるためにアプリを作ってるんだけど、久しぶりにc++触るとセミコロンがうっとおしくなるね
参照、ポインタ、値を自由に扱えてかつ新しい言語の特徴を捉えてるような言語が出てほしい

254 名前:デフォルトの名無しさん [2017/05/06(土) 06:35:37.73 ID:7HgaeBZn.net]
勝手にHaskellをスレタイから省くな。

255 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 07:19:08.10 ID:gBi5/Vqg.net]
>>252
前スレの埋め込みを使った再帰型の試みとして、主要なメソッドを再定義しなければならない版より「マシ」と言ったまでで
君のチャンネル版よりマシという意味ではない

それは他言語版と同じ設計で比較しやすくしたって程度だから気にしないで

256 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 07:23:37.59 ID:gXvlLccW.net]
各自、次世代言語に求めるものが違うのだろうけど、
気を悪くしないで欲しいがHaskell外してKotlinは個人的にはないかな。
敢えて外すなら次世代感満載のAgdaを入れて欲しい。
が、呼び水としての趣旨からしたらHaskellを敢えて外す理由が分からない、個人的な怨嗟?

257 名前:デフォルトの名無しさん [2017/05/06(土) 08:00:28.21 ID:Yu22orOs.net]
実用性が乏しすぎるので次世代にふさわしくないとの事
あと前スレでまともなコードを掲示しなかったので、そもそもHaskellerが居ない事が分かった



258 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 08:15:37.40 ID:JdaZnrFf.net]
>>256
Javaより古いHaskellを次世代言語に混ぜた初代スレの>>1がどうかしている。
初代スレはHaskellの美しさを語るエアプログラマーが多かったが
次世代言語の実用性を語るスレに変わってよかったと思うよ。

259 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 08:35:08.14 ID:9tv813Aq.net]
Haskell推しだが、次世代取れるほどライブラリ充実してないし、速くもないからsmalltalk的な立ち位置だと思ってる。
次世代じゃ無いけど、学ぶべき価値ある言語。

260 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 08:41:48.81 ID:gBi5/Vqg.net]
>>255
参考まで、ほぼ同じ設計にした場合の
Ruby版 ideone.com/7VnOfe
Python版 ideone.com/UngSO8
Scala版 scastie.org/30851
Swift版 swift.sandbox.bluemix.net/#/repl/59032b64ebfba02b8d274320

261 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 08:43:22.81 ID:9tv813Aq.net]
>>257
Mix-inとか言われては書けなかったね。
普通のクラス代りなら何とかなったが。
そもそも目的のプログラム作るアプローチとして関数かクラスかなのに、クラス作れは問題としてオブジェクト指向に有利過ぎ。
実際に動くプログラムで拡張勝負のが公平っしょ。
だから>>240提案した。

262 名前: mailto:sage [2017/05/06(土) 08:50:48.08 ID:BE072L/9.net]
>>255
なるほど。申し訳ない絡み方したな。
smalltalkでもパッシングに徹すればひたすらコーディング量はあるけど割りと文句無いのできそう。
>>256
Kotlinなしなの?使いやすいのに。実用性あるから?

263 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 08:56:13.51 ID:VviFbgmi.net]
各言語、得意分野あるからな。
証明付きでプログラム書けとかなったら、Coqなどの証明支援系の独壇場で、
他言語の入り込む余地がないように思われるが如何?

264 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 08:58:57.84 ID:ye19IDAy.net]
Bertrand MeyerがEiffelを大事そうに抱えながら>>263を睨んでいるぞ。

265 名前:デフォルトの名無しさん [2017/05/06(土) 09:31:45.79 ID:nikLe03p.net]
自分もRubyやGroovy使ってたせいかもしれないが
Kotlinは言語としては悪くないけど次世代感は感じない
golangぐらい簡素な仕様にしてくれればまた違ったとは思うけどJVM言語だしなあ

266 名前:デフォルトの名無しさん [2017/05/06(土) 10:21:48.72 ID:BwUsBv8i.net]
言語が次世代でありさえすればライブラリはJVMでもなんでもいいぞ
ライブラリ関係ないなら、ライブラリがない言語でも参加しやすい

267 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 10:22:29.07 ID:ubF1nelW.net]
>>262
> smalltalkでもパッシングに徹すればひたすらコーディング量はあるけど割りと文句無いのできそう

具体的にはどこらへんにその「量」を感じた?
ドアの振る舞いを記述してるコード自体はGoで書くよりずっと簡潔でステップ数も少ないはずだけど

念のため補足すると件のSmalltalk版では、通常はGUIやIDE任せにするクラスやメソッドの定義
(ちなみにGNU Smalltalkなどを除き、IDE前提のSmalltalkにはクラスやメソッド定義の構文が無い)
をあえてクラスへのメッセージングでやっているのでそのぶん冗長にみえるかもしれないけど



268 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 12:29:53.45 ID:64kzmcng.net]
何でSmalltalkerさんは劣った設計で比較する事に拘ってんの?
Goが得意な技法はダメ、Smalltalkで書きやすい技法だけ使って書くっていう縛りでもあるの?

269 名前:デフォルトの名無しさん [2017/05/06(土) 12:43:22.47 ID:xfCUj8G0.net]
>>259
同意

270 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 12:46:26.00 ID:ye19IDAy.net]
>>268
どうしてそういう発想になるのか全く不明。
人間の言葉でしゃべって。

>>267 を補足すると、
compile:とかがやたら続いているコードブロックがクラスやトレイトの定義に相当する部分で、
それ以外がドアやストッパーを操作するサンプルコードな。

271 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 12:52:37.52 ID:ubF1nelW.net]
>>268
いや別に拘ってないですよ

そもそも誤解があるようなので断わっておくとGoを貶めるつもりは全然なくて
Smalltalkに難癖を付けてるID:BE072L/9が前スレからGoが詳しそうなんで
その方がわかりやすかろうとGoを引き合いに出したまでです

Goの得意な技法を駆使した優れた設計ってどんなのですか?ぜひ教えてください
今のところ埋め込みスタイル以外で出ているのだとこういうのでしょうか?→ideone.com/yvttId
このお題自体では設計を工夫しにくいと言うことであれば、新たにGoに有利なお題をご提供いただければと

272 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 12:58:55.97 ID:ubF1nelW.net]
>>268
あと、

> Smalltalkで書きやすい技法だけ使って書くっていう縛り

とのご指摘ですが、少なくとも Ruby、Python、Scala、Swift では Go よりすんなり書けています>>260 から
旧世代言語で書きやすい…ならともかく、Smalltalkで書きやすい技法だけって縛りにはならないですよね?

273 名前:デフォルトの名無しさん [2017/05/06(土) 13:05:23.06 ID:BwUsBv8i.net]
愚問という便利な言葉がある
答える側には間違えるリスクがあるのに問う側を無リスクで無謬とするのは不公平

274 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 13:51:25.64 ID:dM6SBXFL.net]
その言語特有の機能で書いた方が優劣分かりやすくね?

275 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 14:24:42.57 ID:wNWjHlrM.net]
>Goの得意な技法を駆使した優れた設計

chan と select 使ったサーバープログラムなんでねーの。
ああいうふうにチャンネルに放り込んだものを適当に一列に並べてくれるのはかなり楽。

276 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 15:30:08.75 ID:TldMS9JZ.net]
ここまで次世代言語から>>240のコードが出てない件。
単純な力押し検索だから、難しいアルゴリズムでも無いんだが。。。
おいらも頭悪いんよ。

>>244の書き方でargs書き換えと、nsをcontentから取ってcsへ変更。sも折角だからwordから取ってwへ。

import System.Environment

search _ [] = False
search w cs | take (length w) cs == w = True
search w (_:cs) = search w cs

main = do
(file:word:_) <- getArgs
content <- readFile file
print $ search word content

277 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 15:43:50.78 ID:TldMS9JZ.net]
仕様変更への耐性だから、基準となる第一形態のコードの長さは問わない。
どんな変更があるか事前準備したクラスがあってもおk。
第三形態までの変更箇所の少なさが言語の優劣とする。



278 名前: mailto:sage [2017/05/06(土) 16:40:50.57 ID:BE072L/9.net]
意見≒難癖とは生きづらいな

279 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 18:13:57.91 ID:ye19IDAy.net]
事実に基づかない悪評価は難癖だわな

280 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 20:12:56.46 ID:XqR1goBE.net]
エンジニアガイジのGo版ってあのなぜか最初から並列化を意識して書かれてたやつだっけ?

281 名前: mailto:sage [2017/05/06(土) 23:05:01.66 ID:BE072L/9.net]
>>279
主観としての悪評価と客観としての悪評価を混同すんなよ…。
採点してる訳じゃないんだから。そこまで傲慢でも無いよ。

俺Rubyボロクソに言ってるけど、主観としてだよ。

>>280
並列化を意識してるんじゃないよ。
コンポーネントとして存在し得るかを考えただけ。
ノブがノブだけで存在できないなんておかしいじゃん。何にも繋がってない地面に転がったノブさえ定義できないのに、突然ドアについてる突起をノブだと言うくらい不自然じゃないの?
オブジェクト指向ってなんなの?
地面に転がってるのも、ドアについててもノブであって、ノブとしての役割を果たしているか否かでしかないのでは?
確かにそのノブがノブとして成立するのはドアについたときだろうけど、それ以前からそいつ自身の存在が変わったわけじゃないじゃん。

282 名前:デフォルトの名無しさん mailto:sage [2017/05/06(土) 23:09:30.32 ID:bKqO2+sL.net]
>>281
んー。クローザーついてないドアにもスレッド使ってなかったっけ?

283 名前: mailto:sage [2017/05/06(土) 23:16:33.79 ID:BE072L/9.net]
>>282
スレッドと言うかまあマイクロスレッド使ってるけど。
キューイングしてる所で同期をGoにやってもらった形に近い。
イベントやらメッセージパッシングと変わらんつもりだけど、キュー抜いて中もgoroutineなのは確かに悪手は悪手か。
それは確かにそうだな。

284 名前:デフォルトの名無しさん [2017/05/07(日) 02:09:25.68 ID:bNWzpChq.net]
まだHaskell信者が暴れてるのか
ラッチの開閉すら実装出来ないと前スレで判明してのによく再登場出来るな

285 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 02:38:17.71 ID:zdh+Rbcj.net]
いやあの問題が糞だと思ったHaskellerが問題出してる流れじゃないの?

286 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 02:59:03.65 ID:JOXD31Or.net]
>>284
実装はできてたでしょ?

287 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 04:54:40.21 ID:ehHyxLGM.net]
久しぶりに覗いてみたけど、お前らまだやってたの?
良く飽きないな



288 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 08:02:58.35 ID:M/7nygcc.net]
Smalltalkerはお題で使って良い言語機能に縛りを入れようとするからクソ

289 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 08:26:48.70 ID:HF1KyfYe.net]
まぁここであーだこーだ言ったところで、大手の採用が多くなった言語が次世代扱いになるだけだからな
主に決めるのは外人だ

290 名前:デフォルトの名無しさん [2017/05/07(日) 09:55:32.27 ID:6O1o1Sih.net]
>>289
まるでトクホや世界遺産に採用されるみたいな
官僚主義だな

291 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 10:05:54.32 ID:4Tfm86M3.net]
>>281
主観で悪評価しているなら、それこそ難癖以外の要素ゼロじゃないか。

292 名前:デフォルトの名無しさん [2017/05/07(日) 10:48:31.07 ID:6O1o1Sih.net]
嘘ニュースを野放しにして個人の感想を問題視するのは本末転倒

293 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 10:56:51.74 ID:U5ljnRqU.net]
Haskell 難しすぎて叩きたくなるのもわかる。

294 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 11:24:25.93 ID:PZmLVVS1.net]
ほんと難しいよ
物を作る道具としては失格だな

295 名前:デフォルトの名無しさん [2017/05/07(日) 11:25:56.17 ID:6O1o1Sih.net]
静的型が難しすぎて失格なんだよ
叩きたいことと叩くべきことが一致してない

296 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 11:29:53.16 ID:Kq+qtoGk.net]
microsoft word の動作が難しいって意味での難しさだわな。
無意味なむずかしさだわ。

297 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 11:56:43.37 ID:uANj4DVJ.net]
性的型が難しいって。。。
自分で正しくプログラム組めてませんって言ってるようなもんじゃん。。。



298 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 12:01:01.50 ID:uANj4DVJ.net]
溜まってんのかな。。。
x性的型が
o静的型が

299 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 14:33:06.42 ID:2RFcNsFZ.net]
お前らのゆう次世代言語って、キャットドア問題を解けるのか?

300 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 14:53:43.84 ID:38Z51qvh.net]
>>299
キャットドア問題って言いたいだけだろお前
すでに答えは出てるし、そもそも問題の把握すら出来てないじゃないか?

301 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 14:58:24.43 ID:EXP2lJkU.net]
>>240
>>276
ライブラリ使うのとかはありかな?
主旨から外れるかもしれないが、こんなのどうだろう

import System.Environment
import Data.Conduit
import qualified Data.Conduit.Text as CT
import qualified Data.Conduit.Binary as CB
import Control.Monad.Trans.Resource
import qualified Data.Text as T
import Control.Monad.IO.Class (MonadIO)

searchSink :: (Monad m, MonadIO m) => T.Text -> Sink T.Text m Bool
searchSink w = do
n <- await
return $ case n of
Nothing -> False
Just s -> T.isInfixOf w s

main :: IO ()
main = do
(file:word:_) <- getArgs
x <- runResourceT
$ CB.sourceFile file
$= CT.decode CT.utf8
$$ searchSink (T.pack word)
print x

302 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 15:03:42.15 ID:zdh+Rbcj.net]
キャットドアが解けて何かいいことがあるんですかね?

303 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 16:13:25.59 ID:m17h7+4k.net]
>>301
仕様変更への耐性を競うだけなので、まあライブラリ使ってもそれで仕様変更に強いなら構わないけど。。。

Haskellとsmalltalkしか回答寄せて貰えてない。。。
キャットドアのクラス作るだけの問題よりも、客からこんな機能付けてって要望に応える形で仕様変更されたのを如何にコード変えずに対応するかって問題は実践向きで良いと思ったんだが。。。

304 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 16:18:52.35 ID:m17h7+4k.net]
あと3時間もすれば会社行くからコードは明日。。。も出かける予定で無理か。。。
明後日には書くので、第二形態の問題だけ出しとく。

ファイル中に検索するキーワード見つかったら、見つかった数も表示するように機能追加。
見つからなかった時は表示しなくても良いし、表示を分けるの面倒臭かったら0個って表示で見つかった時と表示機能を共有しても良い。

305 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 16:26:36.91 ID:EXP2lJkU.net]
>>303
なるほどね
ならConduit使った方が処理簡単に挟めるから、仕様変更には強いと思う
あとはストリーム処理だから読み込むファイルが巨大になっても一定のメモリしか使わないってのも考えてみた

306 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 17:24:00.66 ID:zdh+Rbcj.net]
>>303
多分実戦向きの問題でいい感じなんだと思うんだけど、出題レスがとっちらかってて全部探すのめんどくさくてやる気起きなくてすまん
綺麗に纏まったレスどれ?

307 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 17:30:40.95 ID:m17h7+4k.net]
>>240>>277だけ見てくれればおkかと。



308 名前:デフォルトの名無しさん [2017/05/07(日) 17:57:04.14 ID:zdh+Rbcj.net]
>>307
意図が良く分からないんだけど、Pythonで言えば

from sys import argv


def search(path, word):
____with open(path) as f:
________for l in f:
____________if word in l:
________________return True
________else:
____________return False


if __name__ == '__main__':
____print(search(argv[1], argv[2]))

みたいなのでいいの? とりあえず書き捨ての簡単なプログラムから初めて拡張していく感じで
多分これ拡張しろって言われたらsearch関数まるっと書き直しちゃうけど

309 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:08:49.23 ID:m17h7+4k.net]
>>308
オブジェクト指向も関数型言語も、仕様変更に強いって言われて広まったり注目されてるから、次世代言語も仕様変更に強くないと使える言語と言えないと思って。

だから、書き捨てでも良いし、どんな変更が来るか事前に予測した設計でも良いけど、設計変更に強いと言うのを示せるか?って感じ。
ちなみに私のHaskellは何にも考えてはいない。
自信があるとかじゃなくて、デザパタとか知らない。
関数型言語が設計変更に強いなら、まあ何とかなるだろうってノリ。

全体の趣旨
>>277

第一形態
>>240

第二形態<-今ここ
>>304

310 名前:デフォルトの名無しさん [2017/05/07(日) 18:14:46.33 ID:zdh+Rbcj.net]
おっと2問目もあったか
Pythonで言えば

def count(path, word):
____with open(path) as f:
________return sum(l.count(word) for l in f)

でも追加しておけばOKだな。うん。searchの内容一切使ってないけど変更は3行やね
つーかsearchももっと短くできたな

311 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:18:38.81 ID:zdh+Rbcj.net]
>>309
仕様変更に強いっていってもこのお題の長さなら仕様変更というより新たに書き上げる短さを競うことになるな
一切再利用考えなくても三行だし

312 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:23:23.71 ID:/lTp1FVO.net]
>>304 Squeak/Pharo Smalltalk

| search |
search := [:fname :keywd |
 FileStream oldFileNamed: fname do: [:file |
  | count |
  count := 0.
  [file match: keywd] whileTrue: [
   count := count + 1.
   file atEnd ifFalse: [file skip: 1 - keywd size]].
  count
 ]
].
search value: 'test.txt' value: 'something'

ws.stfx.eu/RU59LGEMKG9G

313 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:23:58.94 ID:m17h7+4k.net]
そこをどうにか機能追加で
search test.txt hoge
Ture 4

みたいな感じに表示項目増えるように第一形態のコードを育てる様にして欲しいんだが。。。
関数名以外は中身が丸っと変わっても良いけどさ。

314 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:27:46.84 ID:zdh+Rbcj.net]
え、関数名変えたらいかんの?
それはおかしいやろ
一回作った関数の振る舞いを変更するのはおかしい。別の関数を作るべき

315 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:28:27.76 ID:m17h7+4k.net]
Haskellではタプルをそのまま表示して

search test.txt hoge
(True,4)

ってする予定。

316 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:29:37.82 ID:m17h7+4k.net]
>>314
そう言う問題も第二弾として考えてる。

317 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:32:35.47 ID:zdh+Rbcj.net]
うーん。この程度の量で無理に機能追加で育てていくこと自体が設計ミスだと思うけどなあ



318 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:42:25.99 ID:m17h7+4k.net]
そこは承知の上で、まだ次世代言語入門したばかりでも参入しやすい様にってのと、過去のコードに影響あるよね?って事で第二弾に持って行きたい。

319 名前:デフォルトの名無しさん [2017/05/07(日) 18:47:14.19 ID:zdh+Rbcj.net]
はいPythonまとめ
searchはもっと短い実装思いついたから短くした。

from sys import argv


def search(path, word): # 1st
____with open(path) as f: # 1st
________return any(word in l for l in f) # 1st


def count(path, word): # 2nd
____with open(path) as f: # 2nd
________return sum(l.count(word) for l in f) # 2nd


if __name__ == '__main__':
# print(search(argv[1], argv[2])) # 1st
print(count(argv[1], argv[2])) # 2nd

変更は2ndって書いてある4行。一切再利用とかしてないけど、このお題に関して分かりやすさ、変更の少なさ、安全さでこれ超えるのは無理でしょ

320 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 18:51:13.41 ID:zdh+Rbcj.net]
>>318
やりたいことは了解したけど、回答者としては適切な設計でいきたいから、再利用したほうがいいと判断するまで再利用しないからな
まあいい具合に短いし気が向いたら次世代っぽい言語でもやってみるか

321 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 19:24:12.22 ID:m17h7+4k.net]
(しぶしぶ)了解。

322 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 19:36:18.70 ID:4ZC1qsBr.net]
再利用しないほうが少ない変更でいけるものに再利用を強制して、その分量で言語の優劣を測るというのは理不尽な話だ

323 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 20:18:32.73 ID:zdh+Rbcj.net]
Pythonのコードで再利用せずに済んでるのはバッテリー付き言語であるのが大きいな。もし次世代言語でmatchとかcountすらないようなのがあるとしたらその言語にとってはそこそこいい課題になるかもな

324 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 20:59:47.13 ID:/lTp1FVO.net]
>>304
ファイルの行ごとの内容はメモリに収まる程度なのか、とか
例えば 'xxxoooxxx' という文字列内に 'oo' は1個なのか2個なのか、とかは
回答側の都合がいいように自由に決めていい?

325 名前:デフォルトの名無しさん [2017/05/07(日) 21:31:50.41 ID:6O1o1Sih.net]
仕様変更というから仕様バグをデバッグするのかと思ったら

バグのない完成品に機能追加して多機能化すれば優秀さを示せるって発想か
嫌な予感がする

326 名前: mailto:sage [2017/05/07(日) 21:34:41.10 ID:tachXp58.net]
>>322
可換であるべき理由を殺しに来てるよね。

327 名前:デフォルトの名無しさん mailto:sage [2017/05/07(日) 23:11:40.56 ID:4ZC1qsBr.net]
>>326
どういう意味?



328 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 01:06:43.83 ID:F16X/4LX.net]
Ocamlって型クラスないのか

329 名前: mailto:sage [2017/05/08(月) 06:18:15.11 ID:FkyLZnez.net]
>>327
再利用せずに入れ替えたいから、その部品が使われるときのインターフェイスを定義して、関係ないものをカプセル化するんじゃん?
再利用して無理に機能追加してると、割りと早めにインターフェイスは形骸化するよ。
引き戸である、とか、このドアは回転扉で開けると反対が閉まる、とか、エアロックみたく、どちらかしか開かない制限をかけたいとか、そういう要件で安易に
扉だったものを魔改造するハメになる。
そうすると、インターフェイスってものや、カプセル化ってものが、完全に無意味になる。
魔改造されてて、本来の意味を失ったインターフェイスの「ドアを押す」メソッドとか怖すぎるじゃん。

330 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 06:39:47.64 ID:pk8djPQr.net]
>>329
横レスだけど
ざっくり言うとインターフェイスや型クラスの存在理由を殺しにかかってるって意味だよね
元の言い方だとちょっとわからなかったよ

331 名前: mailto:sage [2017/05/08(月) 06:45:50.09 ID:FkyLZnez.net]
>>330
インターフェイス、型、あとはクラス構造自体の意義、もうちょっと広くとっても良いかなって思って。
Cでもアセンブラでも可換な作り方って出来るから、あまりに具体例にするのも話が矮小化しそうだなぁって思ったんよ。
申し訳ない。
「も、含めて」とかちょっと言い方考えるわ。

332 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 06:53:05.16 ID:pk8djPQr.net]
>>331
言いたいことはわかるよ
ただ可換なって言うだけだと
上の問題例もアリになっちゃうかなと…

333 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 06:57:25.03 ID:Ya4nTupG.net]
アルゴリズムなんてどれで書いても同じなんだから
もっとUI作りやすい言語くれよ。

334 名前: mailto:sage [2017/05/08(月) 07:22:21.17 ID:FkyLZnez.net]
>>332
あーなるほど。
難しいもんだな。表現ってのは。
ありがとう、勉強になる。ちょっともう少し練ってから話すわ。

335 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 18:51:10.68 ID:nU60kBJx.net]
>>324
行は基本メモリに収まる程度だよ。
小説とか、常識的なテキストで問題無ければおk。
行に一個二個を回答側の都合ってのは普通駄目だろう。。。
でも、あんまりにも回答者いないんでもう良いよ。。。

336 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 18:54:25.80 ID:nU60kBJx.net]
>>329
あー。。。
あんま考えずに提案してたわ。。。
うーん。。。
インターフェースは変えずにって条件付ける?
実際に引数増やさないと駄目な時は補助関数作って、実際の処理はそっちに丸投げみたいな形で。
一応第二弾ではそう言うのも考慮して、既存の関数に手を加えないで機能拡張ってテーマで行く予定だけど。

337 名前:デフォルトの名無しさん mailto:sage [2017/05/08(月) 21:10:34.76 ID:nbca9qQS.net]
>>335
> 行に一個二個を回答側の都合ってのは普通駄目だろう。。。

であれば、正規表現に丸投げするのでもなければ処理内容にも影響するので
例えば 'xxxoooxxx' 内に 'oo' は1個と数えるか2個と数えるかとかは出題側で事前にきちんと決めてください



338 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 00:31:37.08 ID:fIUN0UPL.net]
ああ!
勘違いしてた。
そう言うことね。
ラッキー7(777)検索してて7777ってなってたら1個と数えるか2個と数えるかって事か。
私の方法だと2個に数えてるので2個にしましょう。

339 名前: mailto:sage [2017/05/09(火) 02:14:34.77 ID:w3DidVUp.net]
メモリをジャブジャブ使えて1個で考えて良いなら殆どの言語で一行なんだけどなぁ。
jsで言うと(content+'').split(delimiter).length-1だから。

340 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 07:18:26.65 ID:83wQykSi.net]
>>335
「小説とか」ということは、日本語の可能性もあるの?その場合に想定してるエンコードは?

とにかくideone.comとかで参加者が気軽に動作を確認でき、かつ仕様を満たした回答例を先に出しといてください
実戦向きとか言うわりに細かな仕様がまったくわからんし、動くコードでもなければエスパーするにも限界があるよ

341 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 08:36:02.65 ID:YN7Krfta.net]
言語が次世代になっても要件定義(笑)などが旧世代だと
どうにもならんね

342 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 09:22:59.82 ID:7e9h09Aa.net]
>>339
+'' ってなんかのおまじない?

343 名前: mailto:sage [2017/05/09(火) 10:56:31.08 ID:b+ihuqXk.net]
>>342
splitがundefにならんように、文字列とコンカチしてる。

344 名前: mailto:sage [2017/05/09(火) 11:59:38.90 ID:b+ihuqXk.net]
言葉足らずだったな。文字列と見せかけて数値にどっかで化けさせた奴対策だったり、そもそも引数来なかったとかそういうやつ。

345 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 13:13:43.62 ID:7e9h09Aa.net]
>>344
なるほど
ただ、それでエラーは出なくなるだろうけどバグが見つかりにくくなる悪寒しかしない

346 名前: mailto:sage [2017/05/09(火) 15:17:46.56 ID:tzdZ6ACH.net]
>>345
数数えるんだから、数えられないものが来たらゼロになっていいんよ。

347 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 16:14:33.37 ID:PEK3Ov/R.net]
>>339
そうなんだ。。。
じゃあ、両方のを書くのでどっちもおkにします。

>>340
長さは?とか聞かれて小説とかって書いたけど、今回は適当なソース読ませる程度しか想定してないし、参入障壁にしたくないからアスキー文字だけしか想定してない。
本当、思い付きで申し訳ない。
そんな訳で下のコードをコピペして検索にかけると

>search search.hs search
(True,16)

ってなるはず。

んで、777を検索して7777を1個と数える版はsearch2として書いてみた。
最早Pythonよりも修正箇所多そうだけど気にしない。
do形式よりモナド形式が好きなのでdo形式コメントアウトしてるのは気にしないで欲しい。
(ちょうど良かったんで7777を確認用にdoの後ろに追加してる)



348 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 16:15:07.28 ID:PEK3Ov/R.net]
import System.Environment

search w cts = search' (False,0) w cts
where
search' (b,n) _ [] = (b,n)
search' (_,n) w (c:cs) | take (length w) (c:cs) == w = search' (True,n + 1) w cs
search' t w (_,cs) = search' t w cs

search2 w cts = search' (False,0) w cts
where
search' (b,n) _ [] = (b,n)
search' (_,n) w cts | take (length w) cts == w = search' (True,n + 1) w $ drop (length w) cts
search' t w (_:cs) = search' t w cs

-- main = do 7777
-- (file:word:_) <- getArgs
-- content <- readFile file
-- print $ search word content

main = getArgs >>= \(file:word) -> readFile file >>= print.search word

349 名前:デフォルトの名無しさん mailto:sage [2017/05/09(火) 16:29:20.54 ID:7e9h09Aa.net]
>>346
contentがundefinedでdelimiterが'e'とかだったら?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<265KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef