Last active
August 31, 2024 08:54
-
-
Save coleea/23d5c6a302dc193b468b8c2f00a8f4ef to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 함수형 프로그래밍 언어 Haskell Part31©2ch.net | |
UPLIFT에서 광고 없이 체험하세요! 편안한 열람 라이프를 약속합니다! | |
**** | |
| | |
0001 기본 익명씨 전재 금지©2ch.net 2017/09/27(수) 02:33:08.70 | |
함수형 프로그래밍 언어 Haskell에 대해 이야기하는 스레드입니다. | |
haskell.org (공식 사이트) | |
https://www.haskell.org/ | |
이전 스레드 | |
함수형 프로그래밍 언어 Haskell Part30 | |
http://mevius.2ch.ne...cgi/tech/1484491434/ | |
ID:2XAqPuH2(1/3) | |
댓글을 게시 | |
| | |
0002 기본 익명씨 전재 금지©2ch.net 2017/09/27(수) 02:33:55.41 | |
과거 스레드 목록 | |
29) http://peace.2ch.net...cgi/tech/1436869629/ | |
28) http://peace.2ch.net...cgi/tech/1428535861/ | |
27) http://peace.2ch.net...cgi/tech/1420718555/ | |
26) http://peace.2ch.net...cgi/tech/1406436392/ | |
25) http://peace.2ch.net...cgi/tech/1393313450/ | |
24) http://toro.2ch.net/...cgi/tech/1382705669/ | |
23) http://toro.2ch.net/...cgi/tech/1376111807/ | |
22) http://toro.2ch.net/...cgi/tech/1364009659/ | |
21) http://toro.2ch.net/...cgi/tech/1358702176/ | |
20) http://toro.2ch.net/...cgi/tech/1350428908/ | |
19) http://toro.2ch.net/...cgi/tech/1340760070/ | |
18) http://toro.2ch.net/...cgi/tech/1331902463/ | |
17) http://toro.2ch.net/...cgi/tech/1325510368/ | |
16) http://toro.2ch.net/...cgi/tech/1317958045/ | |
15) http://hibari.2ch.ne...cgi/tech/1310199414/ | |
14) http://hibari.2ch.ne...cgi/tech/1299385928/ | |
13) http://hibari.2ch.ne...cgi/tech/1286706874/ | |
12) http://hibari.2ch.ne...cgi/tech/1272536128/ | |
11) http://pc12.2ch.net/...cgi/tech/1252382593/ | |
10) http://pc12.2ch.net/...cgi/tech/1231861873/ | |
09) http://pc11.2ch.net/...cgi/tech/1211010089/ | |
08) http://pc11.2ch.net/...cgi/tech/1193743693/ | |
07) http://pc11.2ch.net/...cgi/tech/1174211797/ | |
06) http://pc11.2ch.net/...cgi/tech/1162902266/ | |
05) http://pc8.2ch.net/t...cgi/tech/1149263630/ | |
04) http://pc8.2ch.net/t...cgi/tech/1140717775/ | |
03) http://pc8.2ch.net/t...cgi/tech/1076418993/ | |
02) http://pc2.2ch.net/t...cgi/tech/1013846140/ | |
01) http://pc.2ch.net/te...o/996/996131288.html | |
ID:2XAqPuH2(2/3) | |
| | |
0003 관련 사이트 전재 금지©2ch.net 2017/09/27(수) 02:35:40.58 | |
(영어) | |
Haskell - Wikibooks, open books for an open world (페이지 안에 내용을 정리한 PDF 있음) | |
https://en.wikibooks.org/wiki/Haskell | |
Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』의 무료 온라인 버전) | |
http://learnyouahaskell.com/chapters | |
Real World Haskell (동명 서적의 무료 온라인 버전) | |
http://book.realworldhaskell.org/read/ | |
(이하, 일본어) | |
Haskell 입문 5단계 - HaskellWiki (공식 사이트 내, 일본어 입문 섹션) | |
https://wiki.haskell...86%E3%83%83%E3%83%97 | |
Haskell - Wikibooks (위 Wikibooks의 동일 제목 일본어 버전. 많은 항목이 미편집) | |
https://ja.wikibooks.org/wiki/Haskell | |
Programming in Haskell | |
http://www.sampou.or.../cgi-bin/haskell.cgi | |
Haskell 공부 | |
http://www.shido.info/hs/ | |
Haskell Programming | |
http://www.geocities...oi/func/haskell.html | |
진정한 프로그래머는 Haskell을 사용한다:ITpro | |
http://itpro.nikkeib...UMN/20060915/248215/ | |
[입문]함수형 프로그래밍―질 높은 코드를 빠르고 직관적으로 쓸 수 있다! | |
http://gihyo.jp/dev/...e/01/functional-prog | |
ID:2XAqPuH2(3/3) | |
| | |
0004 기본 익명씨 2017/09/27(수) 06:37:41.63 | |
오츠 | |
ID:G9HkNsFz | |
| | |
0005 기본 익명씨 2017/09/27(수) 08:45:48.68 | |
질문 드립니다. | |
String 배열 xs를 하나의 요소 당 한 줄씩 화면에 출력할 경우, | |
mapM_ putStrLn xs | |
와 | |
putStr.unlines $ xs | |
중 어느 쪽이 더 좋을까요? | |
ID:l2Dkh0U/ | |
| | |
0006 기본 익명씨 2017/09/27(수) 11:20:36.98 | |
https://ideone.com/hreKZz | |
이전 스레드의 분할 집합 알고리즘을 dp 풍으로 만들어 봤는데 | |
결국 리스트를 만드는 비용은 같아서 오히려 느려졌다. | |
ID:3YTsdy+/ | |
| | |
0007 기본 익명씨 2017/09/27(수) 12:38:35.89 | |
Haskell 입문서 신간이 오늘 날짜로 발매되었습니다. | |
『Haskell 입문 함수형 프로그래밍 언어의 기초와 실천』기술평론사, 3,280엔(세금 별도) | |
http://gihyo.jp/book...17/978-4-7741-9237-6 (일부 페이지 샘플 pdf 있음) | |
https://www.amazon.co.jp/dp/4774192376 | |
ID:e62g5PUw | |
| | |
0008 기본 익명씨 2017/09/27(수) 13:09:22.03 | |
일본인이 쓰는 Haskell 책은 입문서 뿐이네. | |
나쁘다고는 안 하지만, 다양성이 없어. | |
ID:Ig4f10A7 | |
| | |
0009 기본 익명씨 2017/09/27(수) 18:15:22.14 | |
왜냐면 함수형 프로그래밍에 대해 깊은 내용을 쓸 수 있을 만큼 지식과 식견이 있는 사람은 일본에는 없으니까. | |
실무자도, 대학 교수도. | |
ID:fINvBrSj | |
| | |
0010 기본 익명씨 2017/09/27(수) 19:01:25.65 | |
누가 경쟁 프로그래밍을 살아남기 위한 Haskell Tips를 Kindle 출판해 줘. | |
가능하면 Unlimited 대응으로. | |
1 | |
ID:duTWzj9f | |
| | |
0011 기본 익명씨 2017/09/27(수) 21:13:41.99 | |
영어로 괜찮으니 중급자를 위한 서적 추천해 줘. | |
1 | |
ID:A4sTCCrj | |
| | |
0012 기본 익명씨 2017/09/27(수) 21:45:25.22 | |
>>10 | |
haskell-master, 즉 tanakh 대선생님께 부탁할 수 밖에 없네. | |
1 | |
ID:Ys6dXTpa | |
| | |
0013 기본 익명씨 2017/09/27(수) 22:52:12.73 | |
영광스러운 haskell-master tanakh는 요즘 Rust에 푹 빠져 있다네. | |
ID:vJ1/ghVi | |
| | |
0014 기본 익명씨 2017/09/27(수) 23:06:21.04 | |
>>11 | |
무엇을 기준으로 중급이라고 할 수 있을지 모르겠지만, | |
실용적인 앱을 만드는데 필수적인 기술이나 사고방식을 배운다는 관점이라면 | |
http://www.apress.co...s/book/9781430262503 을 추천한다. | |
타임머신을 판매하는 웹 스토어를 만드는 형태로 해설이 진행된다. | |
(왜 타임머신인지는 마지막에 알 수 있다) | |
이름에 Beginning 이라고 되어 있지만, Beginning 은 1부 뿐이고 | |
2부 이후는 실전적인 내용이 강해진다. | |
이 책의 큰 특징은 2부 이후 필요성이 생긴 단계에서 | |
필요한 만큼 Haskell의 구문이나 라이브러리, 기술 등의 해설이 이루어지는 경우가 많다는 것이다. | |
예를 들어 앱의 리소스 처리 방법을 배우는 단계에서 처음으로 | |
IO 모나드를 통한 입출력 해설이 등장하는 것은 당연하지만 | |
같은 장에서 Conduit 나 Binary Serialization 의 해설이 등장한다. | |
실용적인 앱 개발에 있어, 이들을 이용하여 리소스를 다루는 것이 매우 유용하기 때문이다. | |
입문서에서는 전반부에 나오는 타입이 이 책에서는 후반부에 나오는 경우도 있다. | |
입문서를 제대로 이해하고 있다면 적당히 넘기고 싶은 부분도 있을 테지만 | |
거기서 만든 타입이나 함수는 나중에 쓰는 경우가 많으므로, 복습이라고 생각하고 꾹 참아야 한다. | |
개인적으로는 아키텍처 수준의 장이 없는 것이 아쉽다. | |
1 | |
ID:GBvrW/PZ | |
| | |
0015 기본 익명씨 2017/09/28(목) 01:51:54.14 | |
>>14 | |
고마워! 참고가 되었어. | |
ID:z5y5Aaws | |
| | |
0016 기본 익명씨 2017/09/28(목) 14:01:26.19 | |
아아, 피할 수 없어 (영어) | |
ID:UK21Udq4 | |
| | |
0017 기본 익명씨 2017/09/28(목) 21:10:48.47 | |
새로 나온 Haskell 책, 시골에 사는 나에게는 딱 좋네. | |
저자를 보면, 도쿄 같은 스터디 모임은 이런 걸 염두에 두고 있구나 하고 멋대로 생각하고 있어. | |
주변에 Haskeller가 없어 혼자 하고 있지만, 실제적인 면에서 뭔가 빠뜨린 건 없는지 의문이 머리에 남아 있었기 때문에, 이걸로 안심. | |
1 | |
ID:6lr8pJs9 | |
| | |
0018 기본 익명씨 2017/09/28(목) 21:21:59.50 | |
내일 월급 들어오니까 내일 살게. | |
ID:WvuzNAMn | |
| | |
0019 기본 익명씨 2017/09/28(목) 21:30:11.00 | |
>>17 | |
장 마지막 문제나 연습 문제 같은 거 있어? | |
1 | |
ID:Oc+ilhlL | |
| | |
0020 기본 익명씨 2017/09/28(목) 21:30:19.44 | |
예를 들어 undefined를 Agda의 홀처럼 사용할 수 있다는 걸 몰랐어. | |
ID:DWFu7WOr(1/2) | |
| | |
0021 기본 익명씨 2017/09/28(목) 21:33:24.87 | |
실제로 뭔가 만들려고 했을 때 지금 어떤 라이브러리로 어떻게 만들면 되는지 길잡이가 되는 책은 없으니까 | |
그걸 알고 냈을 것 같은 이번 입문서에 기대. | |
ID:hwFo+CWc(1/2) | |
| | |
0022 기본 익명씨 2017/09/28(목) 21:39:17.72 | |
>>19 | |
없어. | |
이론적인 부분은 지금까지의 좋은 책으로 다지고, | |
위에서 말한 것처럼, 세속적인 (나쁜 의미는 아님) 부분을 보충하는 느낌일까. | |
ID:DWFu7WOr(2/2) | |
| | |
0023 기본 익명씨 2017/09/28(목) 22:29:11.61 | |
그런데, 지금 웹 앱이 유행이야? | |
다들 웹 앱 만들고 싶어서 안달이야? | |
ID:Ivu9Y1Xk | |
| | |
0024 기본 익명씨 2017/09/28(목) 23:01:35.48 | |
게임 만들려면 FRP야? | |
어떤 패키지가 좋아? 헬름이라는 녀석? | |
그보다 FRP는 어디서 공부하면 돼? | |
ID:(1/37) | |
| | |
0025 기본 익명씨 2017/09/28(목) 23:10:45.38 | |
Elm, FRP 그만뒀대. | |
FRP와 함수형의 일은 잊어버려. | |
ID:hwFo+CWc(2/2) | |
| | |
0026 기본 익명씨 2017/09/28(목) 23:22:12.38 | |
Functional Reactive Programming - HaskellWiki | |
https://wiki.haskell...Reactive_Programming | |
1 | |
ID:64lLKNQd | |
| | |
0027 기본 익명씨 2017/09/29(금) 00:09:31.41 | |
에에... 그럼 Haskell로 게임은 무슨 라이브러리로 만들어? | |
ID:(2/37) | |
| | |
0028 기본 익명씨 2017/09/29(금) 00:22:48.95 | |
직접 만들어 보는 건 어떻습니까? | |
좋은 라이브러리가 되면 공개해 주세요!! | |
ID:6ZguHByP | |
| | |
0029 기본 익명씨 2017/09/29(금) 00:41:18.81 | |
Game Development - HaskellWiki | |
https://wiki.haskell...org/Game_Development | |
ID:Q5+RKusc(1/2) | |
| | |
0030 기본 익명씨 2017/09/29(금) 00:43:06.66 | |
Applications and libraries/Games - HaskellWiki | |
https://wiki.haskell..._and_libraries/Games | |
ID:Q5+RKusc(2/2) | |
| | |
0031 기본 익명씨 2017/09/29(금) 22:18:38.06 | |
Haskell을 이용한 게임 프로그래밍에 FRP를 사용하는 장점이 없다. | |
ID:8tJM6rkq | |
| | |
0032 기본 익명씨 2017/09/29(금) 22:52:40.90 | |
다들 haskell로 뭐해? | |
haskell을 위한 haskell 하고 있는 느낌. | |
2 | |
ID:7WUGaaf4 | |
| | |
0033 기본 익명씨 2017/09/30(토) 00:36:23.25 | |
자신의 요구에 응해주는 언어를 사용하고 있을 뿐이야. | |
ID:rwsxidmc | |
| | |
0034 기본 익명씨 2017/09/30(토) 04:13:52.83 | |
stack이 있으면 Haskell 컴파일러 설치 필요 없구나. | |
싹 지워버렸다! | |
ID:F2cNQzRT | |
| | |
0035 기본 익명씨 2017/09/30(토) 22:19:25.30 | |
신이시여 감사합니다. Haskell을 만나게 해 주셔서. | |
너는 잠들어 있었지. | |
ID:zP5U//5z | |
| | |
0036 기본 익명씨 2017/09/30(토) 22:52:16.35 | |
>>32 | |
C 언어의 쓰러뜨리는 방법을 발견한다. | |
혹은 C 언어를 쓰러뜨릴 수 없다는 것을 증명한다. | |
ID:m5JakNDN | |
| | |
0037 기본 익명씨 2017/09/30(토) 23:59:21.19 | |
>>32 | |
감히 말하겠다. | |
자신의 처리계를 기술할 수 없는 처리계는 쓰레기다. | |
ID:VwrUR3UB | |
| | |
0038 기본 익명씨 2017/10/01(일) 11:01:26.12 | |
Eq 클래스나 Show 클래스처럼 default deriving으로 사용할 수 있는 클래스를 직접 만들 수 있습니까? | |
1 | |
ID:evM2u7Ti(1/2) | |
| | |
0039 기본 익명씨 2017/10/01(일) 12:00:16.69 | |
>>38 | |
14번째 책에 적혀 있었던 것 같아. | |
1 | |
ID:QSpmDYPw | |
| | |
0040 기본 익명씨 2017/10/01(일) 13:29:55.56 | |
Haskell을 이용한 함수형 프로그래밍 사고방식 | |
Richard Bird (저), 야마시타 노부오 (번역) | |
https://www.amazon.co.jp/dp/4048930532/ | |
이 책 좋아? | |
빨리 말해 줘. | |
1 | |
ID:00V/3sY4 | |
| | |
0041 기본 익명씨 2017/10/01(일) 15:15:55.43 | |
C++ Rust Haskell은 언어와 라이브러리를 보는 것만으로도 즐겁지만 | |
언어와 라이브러리는 금방 구식이 되는 게 무서워서 손을 못 대는 녀석들이 많겠지. | |
ID:hswT9xjT | |
| | |
0042 기본 익명씨 2017/10/01(일) 15:37:36.06 | |
기다려 줘. | |
ID:sFjMHcln(1/3) | |
| | |
0043 기본 익명씨 2017/10/01(일) 15:52:51.93 | |
>>39 | |
고마워. | |
그 책을 빌려 볼게. | |
ID:evM2u7Ti(2/2) | |
| | |
0044 기본 익명씨 2017/10/01(일) 18:25:15.52 | |
아아, 피할 수 없어 (영어) | |
ID:sFjMHcln(2/3) | |
| | |
0045 기본 익명씨 2017/10/01(일) 19:09:32.63 | |
>>40 | |
「함수형 프로그래밍 주옥 같은 알고리즘 디자인」을 위한 좋은 입문서 느낌. | |
ID:rx6vco2K | |
| | |
0046 기본 익명씨 2017/10/01(일) 19:34:05.63 | |
주옥 너무 어려워~ | |
ID:sFjMHcln(3/3) | |
| | |
0047 기본 익명씨 2017/10/01(일) 20:13:16.82 | |
주옥은 진짜 어려워. | |
ID:O7TiEQTZ | |
| | |
0048 기본 익명씨 2017/10/01(일) 23:00:51.17 | |
>>12 | |
tanakh는 이제 글렀어. | |
https://twitter.com/...s/914454692440064000 | |
ID:iMMA7lvE | |
| | |
0049 기본 익명씨 2017/10/02(월) 02:38:46.64 | |
평상 운전 | |
ID:y6gYscpA | |
| | |
0050 기본 익명씨 2017/10/02(월) 20:30:12.49 | |
평양 운전 | |
ID:k+Xmo3sE | |
| | |
0051 기본 익명씨 2017/10/04(수) 19:37:39.13 | |
REPL에서 let문 통째로 여러 줄 붙여넣기 할 수 있었네. | |
한 줄 한 줄 복붙하고 있었던 내가 바보 같았어 ㅋㅋ | |
나 같은 바보는 별로 없겠지만, 일단 주의 환기 차원에서. | |
ID:F2K4hXU2 | |
| | |
0052 기본 익명씨 2017/10/04(수) 22:05:05.88 | |
repl이라기보다는 커맨드라인의 특징... | |
ID:oKe3mPnb | |
| | |
0053 기본 익명씨 2017/10/08(일) 22:00:05.12 | |
Data.Map의 fromList와 toList는 키가 예를 들어 자연수라면 자동으로 오름차순이 되나요? | |
확실히 하려면 fromAscList와 toAscList를 사용해야 하나요? | |
ID:JB+KF/At | |
| | |
0054 기본 익명씨 2017/10/08(일) 23:24:05.25 | |
굳이 따로 만들어 놨다는 건 그렇겠지... | |
ID:Zx8XGEkD | |
| | |
0055 기본 익명씨 2017/10/09(월) 07:02:48.85 | |
Functional Pearl って何? 스스로 Functional Pearl 이라고 불러도 되는 거야? | |
ID:xS+J1z7K | |
| | |
0056 기본 익명씨 2017/10/10(화) 06:54:46.17 | |
vector 패키지에서 리스트 내포 표기법 같은 게 있나요? | |
그리고 그런 문법 설탕은 사용자가 정의할 수 있는 건가요? | |
ID:j0DthWV+(1/2) | |
| | |
0057 기본 익명씨 2017/10/10(화) 07:19:08.32 | |
모나드 내포 | |
1 | |
ID:IE9ZixgD | |
| | |
0058 기본 익명씨 2017/10/10(화) 10:01:50.47 | |
>>57 | |
감사합니다. 살펴보겠습니다. | |
ID:j0DthWV+(2/2) | |
| | |
0059 기본 익명씨 2017/10/15(일) 08:27:10.18 | |
바인드 연결을 잘 몰라서 질문 드립니다. | |
Just 10 >>= \x -> return (x + 1) >>= \y -> return (x + y + 2) | |
라고 썼을 때, 명시적으로 괄호로 묶는다면 | |
Just 10 >>= \x -> (return (x + 1) >>= \y -> return (x + y + 2)) | |
가 되겠죠? 이게 | |
Just 10 >>= \x -> return (x + 1) >>= \y -> return (y + 2) | |
인 경우에도 | |
Just 10 >>= \x -> (return (x + 1) >>= \y -> return (y + 2)) | |
가 되나요? 아니면 | |
(Just 10 >>= \x -> return (x + 1)) >>= \y -> return (y + 2) | |
이거나, 아니면 다른 곳이 묶이나요? | |
아래 경우 어디를 묶어도 답이 같아서 헷갈리기 시작했습니다. | |
ID:3zXjO+sA | |
| | |
0060 기본 익명씨 2017/10/15(일) 18:20:04.06 | |
Just 10 >>= (\x -> return (x + 1) >>= (\y -> return (x + y + 2)) | |
ID:amy6Q4J2(1/2) | |
| | |
0061 기본 익명씨 2017/10/15(일) 18:23:23.93 | |
do | |
x <- Just 10 | |
y <- return (x + 1) | |
return (x + y + 2) | |
Just 23 | |
ID:amy6Q4J2(2/2) | |
| | |
0062 기본 익명씨 2017/10/15(일) 21:17:59.15 | |
괄호로 묶지 않는 한 람다식 리터럴을 사용하면 그 이후는 람다식 안쪽이 되니까 | |
바인드라기보다는 연산자에 한정하지 않고 a+\x->x+b 같은 건 a+(\x->x+b) | |
1 | |
ID:QaXk2fzN(1/2) | |
| | |
0063 기본 익명씨 2017/10/15(일) 21:42:24.61 | |
let이나 case는 별로 사용하지 않는 것이 권장되나요? | |
여기에 적혀 있었어요. | |
http://d.hatena.ne.j.../20110826/1314352340 | |
2 | |
ID:Fr3WOscB | |
| | |
0064 기본 익명씨 2017/10/15(일) 21:44:11.18 | |
>>62 | |
연산자 종류에 한정하지 않고. | |
ID:QaXk2fzN(2/2) | |
| | |
0065 기본 익명씨 2017/10/15(일) 22:04:25.31 | |
>>63 | |
취향대로 해도 괜찮다고 생각해. | |
ID:pVUBwS6g | |
| | |
0066 기본 익명씨 2017/10/15(일) 22:56:15.07 | |
>>63 | |
let과 where를 동시에 사용하지 않기만 지킨다면 뭐... | |
https://wiki.haskell.org/Let_vs._Where | |
참고로 case를 사용하지 않고 패턴 가드로 쓰면 | |
가드를 넘을 수 있는 where가 쓰기 편해서 | |
개인적으로는 case도 let도 사용하지 않아. | |
1 | |
ID:GYZBU1+2 | |
| | |
0067 기본 익명씨 2017/10/15(일) 23:23:28.47 | |
사용하는 의미를 모르겠어. | |
국소적인 스코프 안이니까 식이 아니면 쓸 수 없다면 사용하지 않아. | |
ID:E5HePsK2 | |
| | |
0068 기본 익명씨 2017/10/15(일) 23:33:15.58 | |
>>66 | |
좋은 말 들었어! | |
ID:c/qV5Afw | |
| | |
0069 기본 익명씨 2017/10/16(월) 00:02:00.30 | |
값이면 let, 함수면 where 같은 식으로 구분해서 쓰고 있어. | |
둘 다 섞이는 경우도 많고. | |
case도 do 구문 안에서 등등 흔히 쓰지 않아? | |
ID:TY5gTDK1 | |
| | |
0070 기본 익명씨 2017/10/16(월) 03:01:45.14 | |
왼쪽 위부터 순서대로 읽고 걸리는 게 있으면 let 써. 패턴 가드는 where 한択이네. | |
base 패키지를 대충 조사해 봤는데, 총 개수는 각각 | |
where: 2038 | |
let: 665 | |
case: 979 | |
ID:Nb+0WxCX(1/2) | |
| | |
0071 기본 익명씨 2017/10/16(월) 18:36:49.72 | |
그리고 불필요한 종교 전쟁으로 발전. | |
ID:oTRCGw1x | |
| | |
0072 기본 익명씨 2017/10/16(월) 21:17:09.72 | |
foo = \ n -> let xs = map fib [0 ..] in xs !! n | |
bar = let xs = map fib [0 ..] in \ n -> xs !! n | |
종교는 여러 개를 믿는 게 좋아. | |
nonlocal 하면 lifetime이 길어진다던가 하는 편리한 말을 쓸 수 있어. | |
ID:UKE6NQTo | |
| | |
0073 기본 익명씨 2017/10/16(월) 21:45:30.25 | |
종교 이야기가 나와서 말인데, 다들 에디터 뭐 써? | |
https://github.com/r...te/haskell-ide-chart | |
Atom 쓰는 사람이 많아진 것 같아 (Stepwise Debugger는 뭐지?). | |
1 | |
ID:Nb+0WxCX(2/2) | |
| | |
0074 기본 익명씨 2017/10/16(월) 23:03:58.10 | |
vscode+hie | |
ID:wsZRBdk3(1/2) | |
| | |
0075 기본 익명씨 2017/10/16(월) 23:06:05.01 | |
vscode 좋지. | |
다른 언어에서도 맹활약. | |
ID:1r/tGA5g | |
| | |
0076 기본 익명씨 2017/10/16(월) 23:09:52.45 | |
vim의 language server 지원이 더 진행되면 vim으로 돌아가고 싶어. | |
ID:wsZRBdk3(2/2) | |
| | |
0077 기본 익명씨 2017/10/16(월) 23:13:43.26 | |
https://wiki.haskell...#Problems_with_where | |
이거 앞쪽은 클로저 같은 거라는 건가. | |
ID:RTfo5Gm3 | |
| | |
0078 기본 익명씨 2017/10/17(화) 01:54:05.70 | |
spacemacs + intero | |
ID:kmqw2VEi(1/4) | |
| | |
0079 기본 익명씨 2017/10/17(화) 06:46:01.60 | |
HIE 몰랐어. 시험해 봐야지. | |
나도 Spacemacs야. | |
ID:X7yOqbnN | |
| | |
0080 기본 익명씨 2017/10/17(화) 08:53:48.72 | |
프로그래밍뿐만 아니라, 대략 문자열을 편집하는 작업에 있어서, | |
vim 이외의 에디터는 생각할 수 없는 몸이 되어 버렸다. | |
ID:NQL+y7y0 | |
| | |
0081 기본 익명씨 2017/10/17(화) 10:17:04.48 | |
vscode는 vim이 엉망인 게 문제야. | |
ID:1Byit6P4 | |
| | |
0082 기본 익명씨 2017/10/17(화) 20:53:20.25 | |
오타가 많아서 키 입력 명령 조작이라든가 오조작만 해서 죽겠어. | |
ID:FkVJ0QE/ | |
| | |
0083 기본 익명씨 2017/10/17(화) 21:34:05.58 | |
CoqとかAgda도 하려고 했으니까 Emacs 한択이었고, | |
Vim의 조작성도 익히고 싶었기 때문에 결국 Spacemacs로 정착했어. | |
ID:lwYxKvg3 | |
| | |
0084 기본 익명씨 2017/10/17(화) 21:45:06.92 | |
Spacemacs 알아보려고 했는데, Emacs 버전이 부족해서 죽었어. | |
ID:dWslrgIK | |
| | |
0085 기본 익명씨 2017/10/17(화) 21:48:15.65 | |
정적이라기 보다는 참조 투명하니까, 자동 완성은 충실했으면 좋겠네. | |
data Pen = Pineapple | Apple | |
apple = Apple | |
pen :: Pen | |
pen = a | |
이 시점에서 이미 후보를 apple로 좁혀 줬으면 좋겠어. | |
1 | |
ID:kmqw2VEi(2/4) | |
| | |
0086 기본 익명씨 2017/10/17(화) 22:31:12.09 | |
이교도 간의 칼부림이 시작될 예감인가요? | |
ID:Is39GLXq | |
| | |
0087 기본 익명씨 2017/10/17(화) 22:46:49.54 | |
그런 "좁히기"는 애초에 할 수 없고 해서는 안 돼. | |
애초에 그 예시의 경우, 완전히 중복된다고 해서 오히려 적극적으로 apple을 제외해 줬으면 좋겠어. | |
1 | |
ID:bTvRRU/M(1/2) | |
| | |
0088 기본 익명씨 2017/10/17(화) 22:58:58.88 | |
>>87 | |
가능할 것 같은데. | |
…-> Pen 같은 함수가 없다는 걸 알고 있고, | |
pen의 타입 정의도 한정되어 있으니까, 거기에 쓸 수 있는 값은 한정되어 있어. | |
1 | |
ID:kmqw2VEi(3/4) | |
| | |
0089 기본 익명씨 2017/10/17(화) 22:58:59.79 | |
>>85 | |
그 좁히기의 옳고 그름은 제쳐두고, "참조 투명성"과 "좁히기"의 관계를 잘 모르겠어. | |
그 예시의 경우, 참조 투명할 필요는 없다고 생각하는데. | |
1 | |
ID:IqfDhIHj(1/2) | |
| | |
0090 기본 익명씨 2017/10/17(화) 23:07:03.82 | |
>>89 | |
그렇네. 좁히기에 대해서는 정적이면 충분해. | |
참조 투명하면 실행 중에 값이 바뀌는 일이 없으니까, 예를 들어 Show한 것을 자동 완성 후보로 나열할 수 있어. | |
ID:kmqw2VEi(4/4) | |
| | |
0091 기본 익명씨 2017/10/17(화) 23:16:36.80 | |
id 나 const 나 하는 문제는 제쳐두고 | |
거기서 만약 apple로 좁혀지면 상당히 짜증 날 거야. | |
ID:bTvRRU/M(2/2) | |
| | |
0092 기본 익명씨 2017/10/17(화) 23:25:06.39 | |
>>88 | |
그 예시라면 간단히 할 수 있지만, 일반적으로는 상당히 어려울 거라고 생각해. | |
타입이 동의어라면, 따라가서 원래 타입을 찾아야겠지. | |
import 되었다면, 그것도 전부 따라가야겠지. | |
template 이 사용되었다면, 전개해야겠지. | |
C 전처리기가 사용되었다면, 이것도 전개해야겠지. | |
타입을 결정하는데 관련되는 것은 그 밖에도 많이 있어 (언어 확장이라든가). | |
그리고 참조 투명성은 깨지지 않는다는 전제 하에 이야기하고 있는 거라고 생각하지만, | |
unsafePerformIO 함수가 있다는 걸 잊지 말도록. | |
1 | |
ID:IqfDhIHj(2/2) | |
| | |
0093 기본 익명씨 2017/10/18(수) 11:52:10.17 | |
먼저 자동차를 두 사람이 운전하거나, 독재자가 두 명 있는 나라를 만들어 보면 돼. | |
그게 되면 한 사람을 기계로 바꿔서 인간+기계 콤비를 만들어. | |
ID:LmQIn2MI | |
| | |
0094 기본 익명씨 2017/10/18(수) 22:09:24.34 | |
Haskell로 웹 앱 만들 수 있나요? | |
1 | |
ID:XAtaZZJd | |
| | |
0095 기본 익명씨 2017/10/18(수) 22:40:49.32 | |
>>94 | |
만들 수 있어. | |
프레임워크도 몇 개 있고, 입문서도 있어. | |
ID:CCDizLJ7 | |
| | |
0096 기본 익명씨 2017/10/18(수) 23:03:06.30 | |
웹 프레임워크 쪽은 한때 난립이라고는 말할 수 없어도 꽤 혼란스러웠던 인상이 있는데 | |
최근 흐름은 어떻게 되고 있을까? | |
ID:449CvZ10 | |
| | |
0097 기본 익명씨 2017/10/18(수) 23:44:26.71 | |
죄송합니다. 어떤 타입과 그 처리 함수의 | |
표준/추가 라이브러리에서의 유무 확인인데, | |
실수의 범위를 나타내는 타입으로 (A,B)라는 게 있다고 하고 | |
A 이상 B 미만의 범위를 나타내고 있고, | |
그것이 리스트에 [s1, s2, s3, s4]와 같이 나열되어 있다고 하고 | |
그 내용은 [(0,1),(1,2),(2,4),(4,8)]이라고 하면 | |
실수 "1.5"는 이 리스트 3번째 변수가 나타내는 범위에 | |
포함된다고 알려주는 함수인데, | |
이러한 타입과 함수가 있는 라이브러리를 알고 있다면 | |
알려주세요. | |
2 | |
ID:gezDC8oz(1/2) | |
| | |
0098 기본 익명씨 2017/10/18(수) 23:47:55.99 | |
죄송합니다. | |
"리스트 2번째"가 맞습니다. | |
ID:gezDC8oz(2/2) | |
| | |
0099 기본 익명씨 2017/10/18(수) 23:54:52.59 | |
Yesod의 고통을 이야기하는 글을 최근에 봤어. | |
ID:JBC50Xi/ | |
| | |
0100 기본 익명씨 2017/10/19(목) 00:31:32.35 | |
최근에는 servant가 많지 않을까? | |
ID:IrC75yTx(1/4) | |
| | |
0101 기본 익명씨 2017/10/19(목) 00:42:33.76 | |
>>97 | |
라이브러리 찾을 시간에 직접 쓴 게 더 빠르겠지. | |
import Data.List (find) | |
type Range = (Double,Double) | |
blah :: Double -> [Range] -> Maybe Range | |
blah x rs = find (¥(inf,sup) -> inf <= x && x <= sup) rs | |
ranges = [(0.0,1.0),(1.0,2.0),(2.0,4.0),(4.0,8.0)] | |
main = print $ blah 1.5 ranges | |
1 | |
ID:IrC75yTx(2/4) | |
| | |
0102 기본 익명씨 2017/10/19(목) 00:55:37.69 | |
>>97 | |
없다고 생각해. | |
https://ideone.com/378zY1 | |
1 | |
ID:a0gJXcH3(1/5) | |
| | |
0103 기본 익명씨 2017/10/19(목) 02:16:33.94 | |
아직 Yesod가 최강인가요? | |
ID:CTOkinld | |
| | |
0104 기본 익명씨 2017/10/19(목) 07:52:00.67 | |
Yesod는 세피로트의 나무랑 뭔가 관계 있어? | |
ID:NmeCWEht | |
| | |
0105 기본 익명씨 2017/10/19(목) 11:32:05.27 | |
사전 파일에서 필요한 데이터를 뽑아내는 데 사용하고 있지만, | |
Haskell은 라이브러리를 사용하기보다는, | |
필요한 함수를 직접 쓸 수 있는 게 좋네. | |
찾는 것보다 만드는 게 빠르고 세세한 조정이 가능해. | |
ID:yTKuENfR | |
| | |
0106 기본 익명씨 2017/10/19(목) 15:41:04.63 | |
>>92 | |
참조 투명성을 깨는 unsafe 사용법은 하면 안 돼. | |
사용자에게 구멍 뚫린 트램펄린에서 뛰어다니라고 말하는 거나 마찬가지야. | |
1 | |
ID:a0gJXcH3(2/5) | |
| | |
0107 기본 익명씨 2017/10/19(목) 18:16:54.99 | |
>Haskell은 라이브러리를 사용하기보다는, | |
>필요한 함수를 직접 쓸 수 있는 게 좋네. | |
> 찾는 것보다 만드는 게 빠르고 세세한 조정이 가능해. | |
작은 부품 정도라면 몰라도. | |
1 | |
ID:XElZhSKt | |
| | |
0108 기본 익명씨 2017/10/19(목) 18:41:26.50 | |
> 구멍 뚫린 트램펄린에서 뛰어다니라고 | |
좋네, 이거. 다음에 써먹어야지. | |
ID:TgxB2ED8(1/2) | |
| | |
0109 기본 익명씨 2017/10/19(목) 20:44:43.20 | |
>>106 | |
그건 알고 있어. | |
그 의견에는 나도 전적으로 찬성해. | |
하지만, 하려고 한다면 할 수 있다는 거야. | |
예를 들어 커맨드라인 파서인 CmdArgs 패키지에서는 unsafePerfirmIO 가 사용되고 있어. | |
(꽤 사용하기 편한 라이브러리인데 아쉬운 부분이 있어 아쉬워.) | |
그러니까, 참조 투명성이 유지된다는 전제 하에 자동 완성 기능을 만들 수는 없어. | |
1 | |
ID:C59kUjZF | |
| | |
0110 기본 익명씨 2017/10/19(목) 21:28:00.48 | |
일반적으로 투명성이 유지되고 있다면 unsafe를 사용해도 괜찮겠지. | |
FFI에서 C 라이브러리를 사용해서 값을 가져올 때, 인수로 반환값이 유일하게 정해진다면, 반드시 IO로 감싸지 않아도 괜찮아. | |
자동 완성 시스템에서는 프로그래밍 중에 값을 얻는 것을 생각하고 있기 때문에 제약은 더 엄격해. | |
악의적인 누군가가 코드 중에 unsafePerformIO로 디스크를 날려버리는 코드를 넣었다고 하자. | |
현재 상황에서는 실행하지 않으면 문제없지만, 그 자동 완성 시스템에서는 에디터에 읽어들인 시점에... 날아가 버려! | |
조언은 적절하다고 생각해. 지적을 받고, SafeHaskell에서만 풍부한 자동 완성이 가능하게 하는 회피 방법을 생각하고 있어. | |
ID:a0gJXcH3(3/5) | |
| | |
0111 기본 익명씨 2017/10/19(목) 21:31:47.78 | |
>>109 CmdArgs 패키지는 처음 봤는데... 음... 왜 이렇게 되어 있을까? | |
IO로 만들 수는 없을까? | |
ID:a0gJXcH3(4/5) | |
| | |
0112 기본 익명씨 2017/10/19(목) 21:38:26.29 | |
Haskell을 사용한 프로덕션 코드에서 자주 보는 녀석이네. | |
환경 변수 같은 건 Reader로 넘기는 것보다 간단히 | |
unsafePerformIO로 하는 게 좋지. | |
1 | |
ID:IrC75yTx(3/4) | |
| | |
0113 기본 익명씨 2017/10/19(목) 21:41:05.61 | |
대충 알겠다. 이 용도에서는 어쩔 수 없지. | |
ID:a0gJXcH3(5/5) | |
| | |
0114 기본 익명씨 2017/10/19(목) 21:42:06.30 | |
>>107 | |
>작은 부품 정도라면 몰라도 | |
그 작은 부품을 보기 좋게 조합할 수 있다는 점이 장점이지. | |
ID:IrC75yTx(4/4) | |
| | |
0115 기본 익명씨 2017/10/19(목) 21:51:43.24 | |
unsafePerformIO 단속법 위반으로 체포한다! | |
ID:TgxB2ED8(2/2) | |
| | |
0116 기본 익명씨 2017/10/19(목) 22:14:05.51 | |
컴파일러가 말했다!? 라니, 그냥 복화술이잖아. | |
항상 복화술 하고 있네. | |
ID:n4u77snN | |
| | |
0117 기본 익명씨 2017/10/19(목) 23:17:00.35 | |
어라? 평가가, 늦게, 되네? | |
ID:55bDTs5O | |
| | |
0118 97 2017/10/19(목) 23:19:50.69 | |
>>101 | |
>>102 | |
감사합니다. | |
써 주신 코드를 참고해서 사용하겠습니다. | |
ID:q5MeOdeo | |
| | |
0119 기본 익명씨 2017/10/20(금) 09:50:03.15 | |
>>112 | |
그렇게 하면 왜 Haskell을 쓰는 건지 모르겠어. | |
ID:Bz70yab6 | |
| | |
0120 기본 익명씨 2017/10/20(금) 11:11:48.75 | |
그럼 "아는 Haskell"과 "모르는 Haskell" 둘 다 자유자재로 사용하면 돼. | |
그런 다양성을 왜 긍정하냐고 묻는다면 | |
모르는 새로운 언어를 봤을 때 바로 써먹기 위한 연습이라고 생각하면 되지 않을까? | |
1 | |
ID:zpEeQZDE(1/3) | |
| | |
0121 기본 익명씨 2017/10/20(금) 13:24:48.13 | |
>>120 | |
그런 건 취미나 개인 시간에 해서 대비해 두는 거고, | |
프로덕션(실제 서비스)에서 하는 게 아니라고 생각해. | |
ID:f6ubOuco | |
| | |
0122 기본 익명씨 2017/10/20(금) 13:41:07.05 | |
뭐, 프로덕션이라면 가끔씩 unsafe를 외치긴 하지만 | |
어떤 때 외쳐도 어쩔 수 없는지에 대한 지식이 비법처럼 되어 있는 느낌은 있어. | |
ID:Lk8bVHte | |
| | |
0123 기본 익명씨 2017/10/20(금) 17:24:25.31 | |
x = unsafePerformIO m | |
main = do { | |
safe_x <- return $! x; | |
... | |
} | |
이렇게 하면 무난한 값을 무난한 타이밍에 꺼낼 수 있어. | |
하지만, main을 두 번 실행하면 m은 몇 번 실행되어야 할지에 대한 지식이 비법. | |
ID:zpEeQZDE(2/3) | |
| | |
0124 기본 익명씨 2017/10/20(금) 17:32:08.06 | |
unsafe*를 사용할 때는 매번 결재를 받도록. | |
1 | |
ID:GdkUB6y1 | |
| | |
0125 기본 익명씨 2017/10/20(금) 17:57:47.07 | |
unsafeRead와 unsafeWrite의 자세한 설명이나 사용법을 알 수 있는 서적이나 사이트가 있으면 알려주세요. | |
ID:gxUn2vL9 | |
| | |
0126 기본 익명씨 2017/10/20(금) 18:14:08.30 | |
전역 상수라고 생각할 수 있는 값을 얻고 싶다 + 사용하는 곳이 MonadIO가 아니다 + 설계 변경할 시간이 없다. | |
ID:Vljj85av(1/2) | |
| | |
0127 기본 익명씨 2017/10/20(금) 18:38:52.46 | |
사용하고 싶다기 보다는 읽고 싶어. | |
있는 그대로의 현실을 읽는 주의. | |
현실을 조작할 생각은 없어. | |
ID:zpEeQZDE(3/3) | |
| | |
0128 기본 익명씨 2017/10/20(금) 22:15:19.17 | |
Haskell 하면 특별해질 수 있어? | |
ID:YXH4kbKq | |
| | |
0129 기본 익명씨 2017/10/20(금) 22:37:34.15 | |
소외감을 맛볼 수 있습니다. | |
ID:rG34NDiA | |
| | |
0130 기본 익명씨 2017/10/20(금) 23:04:24.26 | |
그렇게 되지 않도록, 보급에 좀 더 힘을 쏟을 필요가 있겠지. | |
무엇이 있으면 활성화될까 생각해 봤는데, 역시 좀 더 번역서가 필요하지 않을까? | |
「Haskell로 게임을 만드는 책」이라든가 「Haskell로 배우는 범주론 입문」이라든가 어떨까? | |
ID:Vljj85av(2/2) | |
| | |
0131 기본 익명씨 2017/10/20(금) 23:22:26.18 | |
Haskell이라면 3개월 후에, 직접 쓴 코드를 읽을 수 있습니다. | |
1 | |
ID:ut8tKZ1b | |
| | |
0132 기본 익명씨 2017/10/21(토) 00:05:14.21 | |
>>131 | |
그렇게 낙관할 수 없어. | |
3개월 후에도 읽을 수 있도록 하려면, 그에 걸맞는 코드를 써야 해. | |
Haskell이라면 자연스럽게 그런 코드가 된다, 는 건 전혀 아니야. | |
하나의 함수에 여러 가지 일을 시키거나, | |
let 절이나 where 절로 계산 흐름을 써서 함수를 비대화시키거나, | |
반대로 한 줄로 줄이려고 point-free를 너무 많이 써서 암호화시키거나, | |
가인수의 이름을 너무 짧게 해서 역할을 알 수 없게 만들거나, | |
모나드 변환자의 스택을 복잡하게 만들거나. | |
의식하지 않으면 빠지기 쉬운 함정은 얼마든지 있어. | |
1 | |
ID:yOthW/dM | |
| | |
0133 기본 익명씨 2017/10/21(토) 00:23:56.54 | |
https://ideone.com/880zvK | |
3 | |
ID:4Fwr4eN0 | |
| | |
0134 기본 익명씨 2017/10/21(토) 00:58:52.37 | |
>>132 | |
아니, 131은 비꼬는 거라고 생각해. 몇 스레드 전에 있었던 속설 "Haskell에서는 3개월 전에 쓴 자신의 코드를 읽을 수 없게 된다"에 대한. | |
이유는 확실히, Haskell에서는 숙련될수록 코드가 완전히 달라지기 때문에, 였던가. | |
미숙했을 때의 사고방식을 완전히 잊어버리기 때문에, 읽어도 머리에 들어오지 않아. | |
133의 코드에서 풍기는, Java 출신 냄새... 진지하게 쓴 것도 알겠지만, 표준 함수나 표기법과 어긋나 있어서 어쩐지 읽기 어렵네. | |
지금 stack의 코드를 읽고 있는데, 의도적으로 코드 수준을 낮추고 있는 부분이 있어. const 를 사용하지 않고 \_->... 라고 쓰거나. | |
숙련도의 높낮이에 따라 코드가 달라지는 것은 어떤 의미에서는 좋은 일이라고 할 수 있지만, 여러 명이 사용할 때는 어려움이 있는 것 같아. | |
ID:Sgt31MqE(1/2) | |
| | |
0135 기본 익명씨 2017/10/21(토) 01:24:40.12 | |
https://ideone.com/q2RCBe | |
이건 >>133 의 거의 1/10의 행 수로 쓰여 있어. | |
solve = build "" "" | |
라는 행을 보고 | |
"아, 누산기가 두 개 있구나" | |
하고 알 수 있으니 나머지는 그대로 읽기만 하면 돼. | |
1 | |
ID:E5Mq7+kB(1/2) | |
| | |
0136 기본 익명씨 2017/10/21(토) 01:35:46.03 | |
말하자면 >>133의 코드는 장난으로 일부러 그렇게 쓴 거지. | |
ID:E5Mq7+kB(2/2) | |
| | |
0137 기본 익명씨 2017/10/21(토) 04:25:54.74 | |
우와아아! iOS & Android용 ghc 바이너리가 나왔어! | |
http://hackage.mobilehaskell.org/ | |
해설 페이지 | |
https://medium.com/@...butions-490bb2c0c411 | |
ID:Sgt31MqE(2/2) | |
| | |
0138 기본 익명씨 2017/10/21(토) 06:39:56.81 | |
뭐가 시작되는 거야? | |
ID:M5O/aj/a | |
| | |
0139 기본 익명씨 2017/10/21(토) 12:52:45.37 | |
직접 쓴 코드가, 다른 사람이 쓴 코드와 똑같이 보인다. | |
이건 정상이야. | |
같은 방법으로 쓰지 않는 게 이상해. | |
3개월 전 시점에서 이미 다른 사람이 쓴 코드와 똑같이 보여도 괜찮아. | |
ID:JKqQJ+2p | |
| | |
0140 기본 익명씨 2017/10/21(토) 17:28:30.51 | |
>>135 | |
Data.Map으로 더 간단하게 쓸 수 있을 것 같았는데 착각이었어. | |
https://ideone.com/R4dQIW | |
ID:lv/AbapF | |
| | |
0141 기본 익명씨 2017/10/21(토) 21:05:29.77 | |
>>124 | |
결재 로직을 Haskell로 써 줘. | |
ID:sahtjmhq | |
| | |
0142 익명씨@그래, 투표하러 가자! Go to vote! 2017/10/22(일) 09:33:44.39 | |
누산기처럼 인수로 변수 바인딩하는 건 Prolog 같은 방식이지. | |
haskell이라면 누산기 대신 where를 쓰는 방법도 있어. | |
makeMaximumSizeAndMinimumOrderPalindrome wordlist = xs ++ [y] ++ zs where ... | |
ID:IsEvYiKq | |
| | |
0143 익명씨@그래, 투표하러 가자! Go to vote! 2017/10/22(일) 14:42:07.09 | |
Intellij IDEA의 Intellij-Haskell 플러그인이 제대로 실행되지 않아서 포기하려고 했는데 다시 도전해 보니 드디어 됐다. | |
이걸로 나도 IDE 데뷔다. | |
개발 효율이 오르면 좋겠다. | |
ID:b60KFBOe | |
| | |
0144 익명씨@그래, 투표하러 가자! Go to vote! 2017/10/22(일) 15:26:27.37 | |
누산기의 의미를 모르는 바보가 있는 건가... | |
ID:mN+j7loz | |
| | |
0145 기본 익명씨 2017/10/26(목) 22:30:22.73 | |
ByteString에 대해, ↓ 글에 | |
"사용법의 결론을 말하자면, 입력에는 정격 ByteString, 출력에는 지연 ByteString을 사용합니다" | |
라고 적혀 있는데 정말 그런가요? | |
그렇다면 왜 그렇게 되는지 알려주실 수 있을까요? | |
http://d.hatena.ne.j.../20110525/1306298046 | |
ID:/i1iouMm | |
| | |
0146 기본 익명씨 2017/10/27(금) 19:45:49.01 | |
CodinGame을 Haskell로 공략한 분의 감상을 듣고 싶습니다. | |
https://www.codingame.com/ | |
ID:is9IZ5oJ | |
| | |
0147 기본 익명씨 2017/10/28(토) 17:22:18.77 | |
Prelude> let a = 0.3 - 0.2 | |
Prelude> let b = 0.2 - 0.1 | |
Prelude> let c = a == b | |
Prelude> print c | |
False | |
뭐야? | |
Prelude> default (Rational) | |
Prelude> let a = 0.3 - 0.2 | |
Prelude> let b = 0.2 - 0.1 | |
Prelude> let c = a == b | |
Prelude> print c | |
True | |
만족~♪ 👀 | |
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) | |
ID:sV/HPdac(1/2) | |
| | |
0148 기본 익명씨 2017/10/28(토) 17:23:34.06 | |
> 입력에는 정격 ByteString, 출력에는 지연 ByteString | |
이거 나도 의문이었어. | |
ID:sV/HPdac(2/2) | |
| | |
0149 기본 익명씨 2017/10/28(토) 17:37:14.16 | |
구현상의 사정입니다. | |
이론적으로는 아무런 근거도 없습니다. | |
ID:vt4jCtcJ | |
| | |
0150 기본 익명씨 2017/10/28(토) 17:45:11.92 | |
메모리 측면에서는 입력 지연 쪽이 좋을 것 같은데 핸들을 바로 해제하기 위해 정격이라는 건가. | |
ID:zE41SC6F(1/3) | |
| | |
0151 기본 익명씨 2017/10/28(토) 19:05:35.06 | |
512MB of zeroes with different implementations of echo | |
https://i.imgur.com/i5SkntG.jpg | |
1 | |
ID:nHlzoa71 | |
| | |
0152 기본 익명씨 2017/10/28(토) 20:19:14.51 | |
어떤 책이었지, Real World? | |
ID:zE41SC6F(2/3) | |
| | |
0153 기본 익명씨 2017/10/28(토) 20:46:38.08 | |
출처는 Haskell High Performance Programming입니다. | |
ID:DenCC8QE | |
| | |
0154 기본 익명씨 2017/10/28(토) 21:00:26.16 | |
그거구나. | |
읽고 싶었는데. | |
번역 빨리 나왔으면. | |
ID:zE41SC6F(3/3) | |
| | |
0155 기본 익명씨 2017/10/29(일) 00:46:23.62 | |
>>151 | |
정격 ByteString이 지연보다 나은 부분이 없는 건가? | |
ID:UfAXS2oV | |
| | |
0156 기본 익명씨 2017/10/29(일) 07:47:46.53 | |
평범하게 배열과 리스트의 차이. | |
단, 리스트의 요소는 32k의 배열. | |
ID:U58o7DSK | |
| | |
0157 기본 익명씨 2017/10/29(일) 09:00:08.15 | |
WAI 구현 같은 엄청 특수한 상황에서의 이야기겠지. | |
리소스 관리가 생사를 가르는 상황에서는 Lazy IO가 꽤 치명적이니까. | |
하지만 그런 건 지금은 각종 streaming 라이브러리로 OK. | |
ID:vzk3gwxY | |
| | |
0158 기본 익명씨 2017/10/29(일) 22:14:12.00 | |
foldr 과 foldl 은 이렇게 만들 수 있잖아. | |
foldr :: (a -> b -> b) -> b -> [a] -> b | |
foldr _ i [] = i | |
foldr f i (x:xs) = f x (foldr f i xs) | |
foldl :: (b -> a -> b) -> b -> [a] -> b | |
foldl _ i [] = i | |
foldl f i (x:xs) = foldl f (f i x) xs | |
왜 foldl 보다 foldr 쪽이 메모리 효율이 좋은지 모르겠어. | |
둘 다 결과 값이 평가될 때까지 식이 쭉 연결된 채로 있지 않아? | |
2 | |
ID:HYvWAe4Y | |
| | |
0159 기본 익명씨 2017/10/29(일) 22:32:56.88 | |
이거? | |
Haskell의 폴딩 함수 - foldl, foldr | 금방 잊어버리는 뇌를 위한 메모 | |
http://jutememo.blog...ell-foldl-foldr.html | |
ID:SX8DMS20 | |
| | |
0160 기본 익명씨 2017/10/30(월) 00:11:55.76 | |
경쟁 프로그래밍에서 haskell을 사용할 때 조언 좀 해 주세요. | |
이 문제 못 풀었어요. | |
https://yukicoder.me/problems/no/583 | |
https://yukicoder.me/submissions/212458 | |
4 | |
ID:kEApsxXD(1/2) | |
| | |
0161 기본 익명씨 2017/10/30(월) 00:12:43.74 | |
요즘은 컴파일러가 해결하도록 하는 것 같네. | |
haskell - Foldl memory performance in GHC 8.0.x - Stack Overflow | |
https://stackoverflo...ormance-in-ghc-8-0-x | |
ID:XzbjUl3p | |
| | |
0162 기본 익명씨 2017/10/30(월) 00:31:06.68 | |
내용으로는 이거겠지. | |
foldl을 고친다 - 순수 함수 공간 http://tanakh.jp/pos...foldl-is-broken.html | |
>>158처럼 솔직하게 정의하면 어느 쪽이든 차이가 없는 건 맞고, | |
foldl 쪽은 꼬리 재귀 형태가 되니까 seq를 통해서 잘 움직여 줘. | |
1 | |
ID:VIeJ5TeT | |
| | |
0163 기본 익명씨 2017/10/30(월) 08:02:56.80 | |
>>162 | |
> >>158처럼 솔직하게 정의하면 어느 쪽이든 차이가 없는 건 맞고, | |
역시. | |
이 말 듣고 안심했다. | |
다들 고마워. | |
ID:WTE/ZW3E(1/6) | |
| | |
0164 기본 익명씨 2017/10/30(월) 08:39:48.03 | |
foldl을 사용하는 경우는 거의 없는 것 같아. | |
대부분 foldl'을 사용하고 있어. | |
1 | |
ID:rELgjW3C | |
| | |
0165 기본 익명씨 2017/10/30(월) 08:42:25.25 | |
>>160 | |
그 문제는, 요컨대 그래프가 준오일러 경로인지 아닌지를 판정하는 거야. | |
각 역을 정점, 각 노선을 변으로 하는 그래프가, | |
준오일러 경로라면 그들은 계획을 달성할 수 있고, | |
그렇지 않다면 계획은 달성할 수 없어. | |
그래프가 준오일러 경로인 것과, | |
차수가 홀수인 정점이 딱 두 개 존재하는 것과 동치야. | |
요컨대, 한붓그리기가 가능한지 아닌지야. | |
Haskell로 솔직하게 서투르게 프로그램해도 특별히 문제 없을 거야. | |
예를 들어, N개의 요소를 가진 Int형 배열에 accumArray로 차수를 집계해서, | |
filter로 홀수만 걸러내고, 요소 수를 조사해. | |
1 | |
ID:WTE/ZW3E(2/6) | |
| | |
0166 기본 익명씨 2017/10/30(월) 08:46:34.46 | |
>>164 | |
최적화로 정격이 될 테지만 명시적으로 정격 버전을 쓸 필요가 있어? | |
ID:I1PPVtSx(1/2) | |
| | |
0167 기본 익명씨 2017/10/30(월) 08:49:38.37 | |
>>160 | |
미안, 준오일러 경로를 판정하기 전에, | |
연결 그래프인지 아닌지를 조사할 필요가 있었어. | |
ID:WTE/ZW3E(3/6) | |
| | |
0168 기본 익명씨 2017/10/30(월) 09:33:39.10 | |
haskell에서 연결 판정 귀찮아 보이네. | |
1 | |
ID:032bj4sa | |
| | |
0169 기본 익명씨 2017/10/30(월) 11:24:36.92 | |
>>160 | |
>>168 | |
준오일러 경로인지 아닌지를 판정하기 전에 라고 했지만, | |
뒤쪽이 좋겠다. | |
정확히는, 차수가 홀수인 정점이 딱 두 개 있는 걸 확인한 후에, | |
그 두 정점 사이에 경로가 있으면 OK라고 하는 거야. | |
이러면 그렇게 귀찮지 않을 것 같아. | |
1 | |
ID:WTE/ZW3E(4/6) | |
| | |
0170 기본 익명씨 2017/10/30(월) 11:28:25.84 | |
>>169 | |
미안, 안 되겠다. | |
솔직하게 시드 필처럼 따라가는 수밖에 없겠네. | |
ID:WTE/ZW3E(5/6) | |
| | |
0171 기본 익명씨 2017/10/30(월) 11:57:14.99 | |
최적화 O2부터인 걸 잊었어. 미안. | |
ID:I1PPVtSx(2/2) | |
| | |
0172 기본 익명씨 2017/10/30(월) 12:01:00.21 | |
>>160 | |
Haskell이 잘 하는 알고리즘은 분할 정복이니까, | |
가능하면 분할 정복으로 풀 수 없는지 생각해 보는 게, | |
일반적인 접근 방식이야. | |
하지만, 이 문제는 그렇게 풀 수 없을 것 같으니까, | |
다른 명령형 언어와 같은 알고리즘을 쓸 수밖에 없을 것 같아. | |
그래서, 이건 한붓그리기 문제니까, | |
"연결 그래프가 오일러 경로이거나 준오일러 경로라면 한붓그리기 가능" | |
이라는 정리를 이용하게 돼. | |
오일러 경로나 준오일러 경로의 판정은 간단해. | |
핵심은 연결 그래프의 판정인데, 이건 솔직하게 조사하는 수밖에 없어. | |
보통이라면 그래프용 라이브러리를 사용하는데, | |
경쟁 프로그래밍에서는 못 쓸 테니까, 2차원 배열을 사용해서 그래프를 표현하는 거야. | |
그리고 정점을 하나 정해서, 거기서부터 모든 정점을 따라갈 수 있는지 조사하는 거지. | |
이 방법밖에 없어. | |
Haskell에는 정말 안 맞는 문제라고 생각해. | |
ID:WTE/ZW3E(6/6) | |
| | |
0173 기본 익명씨 2017/10/30(월) 12:13:21.53 | |
Haskell을 몰라서 모르겠는데 이런 거라면 간단하게 쓸 수 있을 것 같은데 아닌가? | |
https://yukicoder.me/submissions/213035 | |
1 | |
ID:/4xzRH5O(1/2) | |
| | |
0174 기본 익명씨 2017/10/30(월) 12:24:13.36 | |
>>173 | |
연결성 판정을 잊었네. | |
1 | |
ID:oL0091Lz | |
| | |
0175 기본 익명씨 2017/10/30(월) 12:25:22.45 | |
>>174 | |
잘 보니 Wrong Answer였네...orz | |
ID:/4xzRH5O(2/2) | |
| | |
0176 160 2017/10/30(월) 20:27:20.42 | |
>>165-175 | |
조언 감사합니다. | |
Haskell은 분할 정복을 잘하고, 연결 판정은 서툴다는 걸 기억하겠습니다. | |
ID:kEApsxXD(2/2) | |
| | |
0177 기본 익명씨 2017/10/30(월) 22:41:45.81 | |
연결 판정뿐만 아니라 그래프 관련은 전반적으로 서툴지 않을까. | |
ID:bEDc9q0a | |
| | |
0178 기본 익명씨 2017/10/31(화) 01:03:17.65 | |
컴파일러는 그래프 간소화하는데 언어는 그래프를 못 다루는 건가. | |
ID:hkKKSLGp | |
| | |
0179 기본 익명씨 2017/10/31(화) 01:46:52.15 | |
제약 없는 연결성 판정을 깊이 우선 탐색으로 하는 게 딱히 Haskell 때문은 아니잖아. | |
ID:HrVASABH(1/3) | |
| | |
0180 기본 익명씨 2017/10/31(화) 03:22:06.20 | |
그래프 못 다룬다는 건 경쟁 프로그래밍에서 사용할 경우에만 그렇지? 평소에 쓸 때는 그래프 라이브러리에 넣으면 되니까 신경 쓸 필요 없어! | |
ID:mBYeMGb0 | |
| | |
0181 기본 익명씨 2017/10/31(화) 08:27:49.90 | |
라이브러리라도 계산량은 많아지겠지? | |
ID:v6NvB8KL | |
| | |
0182 기본 익명씨 2017/10/31(화) 08:33:52.06 | |
굳이 바퀴를 재발명하게 만드는 경쟁 프로그래밍은 뭐야? | |
1 | |
ID:ipWwIy6g | |
| | |
0183 기본 익명씨 2017/10/31(화) 08:44:38.36 | |
Data.Array.(!) 나 Data.Vector.(!) 는 O(1)로 접근할 수 있는 건가요? | |
순수 함수형 언어에서 그런 게 가능한가요? | |
1 | |
ID:DbaXyY3l(1/8) | |
| | |
0184 기본 익명씨 2017/10/31(화) 08:50:21.95 | |
>>182 | |
그 편이 더 재밌으니까 그런 거 아닐까? | |
코드 골프랑 같은 거야. | |
제약이 있는 편이 더 불타오르지. | |
ID:DbaXyY3l(2/8) | |
| | |
0185 기본 익명씨 2017/10/31(화) 10:02:54.23 | |
>>183 | |
>Data.Array.(!) 나 Data.Vector.(!) 는 O(1)로 접근할 수 있는 건가요? | |
>순수 함수형 언어에서 그런 게 가능한가요? | |
읽는 건 당연히 O(1)이지. | |
애초에 Data.Vector 문서에 다양한 함수의 계산량이 적혀 있잖아. | |
1 | |
ID:HrVASABH(2/3) | |
| | |
0186 기본 익명씨 2017/10/31(화) 10:40:05.74 | |
>>185 | |
요소 수에 의존하지 않는 계산량으로 구조에서 읽어온다는 건, | |
순수 함수만으로 어떻게 실현하는 거야? | |
너무 신기하지 않아? | |
ID:DbaXyY3l(3/8) | |
| | |
0187 기본 익명씨 2017/10/31(화) 11:15:03.94 | |
뭐? | |
인덱스에서 메모리상의 위치 (예를 들어 포인터)로의 O(1)인 함수만 있으면 되잖아. | |
보통 배열도 해시도 다를 게 없어. | |
2 | |
ID:HrVASABH(3/3) | |
| | |
0188 기본 익명씨 2017/10/31(화) 11:25:52.68 | |
라이브러리로 제공되니까 그렇지, | |
Haskell 문법으로는 쓸 수 없다는 이야기 아냐? | |
ID:u1zcRbeB | |
| | |
0189 기본 익명씨 2017/10/31(화) 11:28:55.70 | |
>>187 | |
키시오 | |
ID:0GSWnPMN(1/2) | |
| | |
0190 기본 익명씨 2017/10/31(화) 11:31:18.73 | |
잘못 썼다. | |
키스하자, 야. | |
ID:0GSWnPMN(2/2) | |
| | |
0191 기본 익명씨 2017/10/31(화) 11:33:38.62 | |
>>187 | |
그 O(1)인 함수는 순수 함수형으로 어떻게 실현하고 있어? | |
나는 엄청 신기해, 라는 이야기야. | |
ID:DbaXyY3l(4/8) | |
| | |
0192 기본 익명씨 2017/10/31(화) 11:36:03.56 | |
순수 데이터형 객체는 전부 구축물 | |
(즉, 기존 객체에서 구축된 것) | |
이라는 관점을 가지지 않으면 이런 이야기는 평생 이해할 수 없을 거라고 생각해. | |
1 | |
ID:K+wdnCfv | |
| | |
0193 기본 익명씨 2017/10/31(화) 11:46:17.59 | |
>>192 | |
이 부분, "순수 함수형 데이터 구조"라는 책에서 공부할 수 있어? | |
아니면 그 책은 관계 없어? | |
ID:DbaXyY3l(5/8) | |
| | |
0194 기본 익명씨 2017/10/31(화) 13:07:49.38 | |
1 = \x _ _ ... -> x | |
2 = \_ x _ ... -> x | |
3 = \_ _ x ... -> x | |
~ | |
이런 자연수를 정의하면 | |
\i -> i a b c ... | |
로 참조 O(1)인 배열 완성. | |
1 | |
ID:xZzZlui7(1/3) | |
| | |
0195 기본 익명씨 2017/10/31(화) 13:20:29.54 | |
>>194 | |
그러면 Data.Vector처럼 동적으로 생성할 수 없잖아. | |
일부러 모르는 척 하는 거야? | |
아니면 맥락을 이해 못 하는 거야? | |
1 | |
ID:DbaXyY3l(6/8) | |
| | |
0196 기본 익명씨 2017/10/31(화) 13:30:02.62 | |
>>195 | |
\x y z ... -> \i -> i x y z ... | |
1 | |
ID:xZzZlui7(2/3) | |
| | |
0197 기본 익명씨 2017/10/31(화) 13:43:09.29 | |
C 언어로 구현하고 래핑한 거 아냐? (잘 모르지만) | |
ID:xihCdoaS(1/2) | |
| | |
0198 기본 익명씨 2017/10/31(화) 13:47:50.97 | |
>>196 | |
대단하다, 너 머리 좋구나 라고 생각했는데, 미안, | |
내 머리가 너무 나빴어, 아직 어렴풋이밖에 이해가 안 돼. | |
예를 들어, 리스트에서 1차원 배열을 만드는 함수를 만들어 줄 수 있겠니? | |
너무 뻔뻔하다고 생각하면, 힌트라도. | |
fromList :: [a] -> 배열 타입 a | |
fromList xs = 뭐시기뭐시기 | |
1 | |
ID:DbaXyY3l(7/8) | |
| | |
0199 기본 익명씨 2017/10/31(화) 15:36:16.62 | |
C 언어로 구현하고 래핑한 거 아냐? (잘 모르지만) | |
ID:xihCdoaS(2/2) | |
| | |
0200 기본 익명씨 2017/10/31(화) 15:50:28.40 | |
>>198 | |
아니, 처치 인코딩 베낀 거야. | |
fromList xs = foldl ($) (\x y z ... -> \i -> x y z ...) xs | |
실제로는 타입 검사가 통과하지 않으니까 누산기 함수를 | |
data Func a b = Res b | Func (a -> Func a b) | |
같은 타입으로 만들고 결과를 패턴 매칭하면 돼. | |
1 | |
ID:xZzZlui7(3/3) | |
| | |
0201 기본 익명씨 2017/10/31(화) 16:16:10.45 | |
>>200 | |
고마워. | |
안 되겠다, 머릿속으로 생각해 봐도 이해가 안 돼, | |
말하자면 깔끔하지 않아. | |
집에 가서 천천히 공부해 볼게. | |
ID:DbaXyY3l(8/8) | |
| | |
0202 기본 익명씨 2017/10/31(화) 18:15:23.97 | |
경쟁 프로그래밍에서 쓸 수 있는 그래프 라이브러리에 Data.Graph라는 게 있었네. | |
Data.Graph | |
https://hackage.hask...docs/Data-Graph.html | |
1 | |
ID:gU/sNGWK | |
| | |
0203 기본 익명씨 2017/10/31(화) 19:08:38.44 | |
>>202 | |
위 문제에서 vertices와 reachable의 길이를 비교하면 되겠다 싶었는데 | |
vertices는 변이 없는 정점도 열거하는 사양이었네. | |
뭐, Graph의 내용은 리스트의 배열이니까 직접 세면 되지만. | |
ID:1toVIYFj | |
| | |
0204 기본 익명씨 2017/10/31(화) 21:49:16.80 | |
함수 합성은 hoge.piyo보다 hoge . piyo 쪽이 가독성이 더 좋나요? | |
1 | |
ID:uNFhbghr | |
| | |
0205 기본 익명씨 2017/11/01(수) 00:06:04.05 | |
>>204 | |
공백 없는 점은 모듈의 네임스페이스 표현에 쓰니까 | |
함수 합성은 후자로 쓰는 게 좋아. | |
모듈 이름은 대문자로, 함수 이름은 소문자로 쓰니까 컴파일러는 헷갈리지 않지만. | |
1 | |
ID:viv8LMSD | |
| | |
0206 기본 익명씨 2017/11/01(수) 00:26:27.90 | |
hackage 소스 코드를 봐도 합성의 점은 띄어서 쓰는 게 많네. | |
ID:llNAjsKg | |
| | |
0207 기본 익명씨 2017/11/01(수) 00:27:10.19 | |
>>205 | |
역시 그렇군요. | |
감사합니다. | |
ID:WlWR964+ | |
| | |
0208 기본 익명씨 2017/11/01(수) 01:06:06.52 | |
사람도 안 헷갈려, 라고 반박하는 사람 예전에 봤는데. | |
그런 사람이 나오면, 종교 전쟁 하지 마, 라고 할 생각이었는데. | |
ID:Fgn1cTLB | |
| | |
0209 기본 익명씨 2017/11/01(수) 07:53:11.67 | |
"대문자와 소문자를 헷갈리지 않는다"의 주어는 뭔가의 전쟁인가. | |
애초에 주어를 쓸 필요가 있는 건가. | |
ID:DzcCU70V(1/2) | |
| | |
0210 기본 익명씨 2017/11/01(수) 09:43:47.82 | |
데이터 생성자도 대문자니까 (ry | |
ID:55me074h | |
| | |
0211 기본 익명씨 2017/11/01(수) 11:37:03.55 | |
첫 글자가 대문자이거나 점이라면 특별한 의미가 있겠지. | |
첫 번째가 어디인지는 정규 표현식으로 정의하면 확실할 것 같아. | |
ID:DzcCU70V(2/2) | |
| | |
0212 기본 익명씨 2017/11/04(토) 23:17:33.32 | |
리스트 내포 표기법이 do 표기법에 일대일 대응하는 건 알고 있지만, | |
언어 확장 TransformListComp 에 의해 확장된 리스트 내포 표기법도, | |
일대일 대응하는 do 표기법이 있나요? | |
then group by e using f 의 동작이 어떤 구조인지 잘 몰라서, | |
대응하는 do 표기법을 조사해서 이해를 깊게 하고 싶습니다. | |
2 | |
ID:GxslH7p8 | |
| | |
0213 기본 익명씨 2017/11/05(일) 08:59:13.86 | |
>>212 | |
> 대응하는 do 표기법을 조사해서 이해를 깊게 하고 싶습니다. | |
그렇게 하셔서 결과를 스레드에 보고해 주세요. | |
1 | |
ID:BXN9Zljm | |
| | |
0214 기본 익명씨 2017/11/05(일) 11:02:14.73 | |
>>213 | |
여러 가지 실험해 보고, GHC 사용자 가이드를 읽어 보니, | |
then group by p using f 의 동작을 이해할 수 있었습니다. | |
하지만, 결국에는 대응하는 do 표기법은 알 수 없었습니다. | |
그런 건 애초에 없는 건지도 모르겠습니다. | |
어쩌면 Core를 출력해 보면 뭔가 알 수 있을지도 모르지만, | |
저는 이미 문제가 해결되었기 때문에, 거기까지 조사할 의욕이 없습니다. | |
그래서 여기에 그 결과를 보고할 수 없습니다. | |
대신, then group by p using f 가 어떻게 동작하는지, | |
제가 아는 것만이라도 말씀드리는 게 좋을까요? | |
ID:33a+kqna(1/2) | |
| | |
0215 기본 익명씨 2017/11/05(일) 13:47:42.35 | |
아는 것은 환영합니다. | |
ID:iHS/FHvi | |
| | |
0216 기본 익명씨 2017/11/05(일) 14:29:15.46 | |
https://downloads.ha...monad-comprehensions | |
> D[ e | Q then group by b using f, R ] = f (\Qv -> b) D[ Qv | Q ] >>= \ys -> | |
> case (fmap selQv1 ys, ..., fmap selQvn ys) of | |
> Qv -> D[ e | R ] | |
> where Qv is the tuple of variables bound by Q (and used subsequently) | |
> selQvi is a selector mapping Qv to the ith component of Qv | |
별도로 모나드로 정의되어 있으니까 do로 정의해도 되지만 | |
Qv에서 요소를 꺼내는 방법이 임시방편으로밖에 쓸 수 없으니까 | |
do를 사용하지 않더라도 일대일 대응하도록 쓸 수는 없어. | |
ID:g7Wivisu | |
| | |
0217 기본 익명씨 2017/11/05(일) 18:08:38.19 | |
Haskell 표기법을 편하게 만드는 6가지 ghc 확장 - Qiita | |
https://qiita.com/ph...b812e43128654245e42d | |
1 | |
ID:Rt4/SB7E | |
| | |
0218 기본 익명씨 2017/11/05(일) 23:15:17.53 | |
>>217 | |
MultiWayIf와 BinaryLiterals 이외에는 가독성 떨어지잖아~! | |
ID:s0bBqtdw | |
| | |
0219 기본 익명씨 2017/11/05(일) 23:28:42.70 | |
>>212입니다. | |
then group by p using f 의 동작은 여러 가지 신기한 부분이 있지만, | |
모든 의문은 then group by p using f 에서 사용하는 함수 f :: (a -> t) -> [a] -> [[a]] 의 첫 번째 인수는 | |
어떤 함수가 전달되는가, 라는 것으로 귀결되었습니다. | |
(그걸 알고 나서야, 이건 then f by p 의 f 와 같다는 걸 알았지만, | |
이쪽에서는 이해에 어려움을 겪지 않을 정도로 간단한 예시만 다루고 있었기 때문에) | |
이 함수 f 는, then group by p using f 가 나타나는 것보다 왼쪽에 있는 모든 바인더를 요소로 가지는 튜플에서 p 로의 함수 | |
라고 생각하면 납득이 갔습니다. | |
예를 들어, | |
[ (x, y) | x <- [1,2,1], y <- "ok", then group by x using groupWith] | |
라면, then 보다 왼쪽의 바인더를 요소로 가지는 튜플은 즉, | |
<1, o>, <1, k>, <2, o>, <2, k>, <1, o>, <1, k> 같은 튜플입니다. | |
(실제로 내부에서 사용되는 실제 데이터 타입은 모르겠습니다) | |
이러한 튜플에서 x 로의 함수이므로, | |
g <1, o> = 1 | |
g <1, k> = 1 | |
g <2, o> = 2 | |
g <2, k> = 2 | |
라는 함수입니다. | |
이러한 함수 g 가 groupWith 함수의 첫 번째 인수에 전달된다고 생각하면 앞뒤가 맞았습니다. | |
ID:33a+kqna(2/2) | |
| | |
0220 기본 익명씨 2017/11/13(월) 22:38:59.83 | |
haskell을 시작해 보고 싶은데 아직 프로그래밍 능력이 부족해서 불안해. | |
다른 언어를 어느 정도 쓸 수 있게 되어야 해? | |
1 | |
ID:GpiHsSLN | |
| | |
0221 기본 익명씨 2017/11/13(월) 23:15:58.10 | |
오히려 절차형 언어에 익숙해진 뇌는 함수형에 적응하기 어려우니까 | |
바로 Haskell부터 해도 괜찮다고 생각해. | |
2 | |
ID:IehbHsjb | |
| | |
0222 기본 익명씨 2017/11/13(월) 23:27:39.67 | |
>>221 | |
Masterminds of Programming이라는 책에서 Haskell 위원회의 한 사람이, | |
다른 언어를 제대로 할 수 있는 녀석은 Haskell도 잘 쓸 수 있다, 는 취지의 말을 했어. | |
1 | |
ID:ZUv/XWe7(1/2) | |
| | |
0223 기본 익명씨 2017/11/13(월) 23:30:10.81 | |
>>221 | |
오히려 바로 Haskell을 시작하는 건 추천하지 않는 느낌이었어. | |
ID:ZUv/XWe7(2/2) | |
| | |
0224 기본 익명씨 2017/11/13(월) 23:30:57.19 | |
>>222 | |
"제대로 할 수 있다"의 의미가, 일반인과는 다른 예감. | |
1 | |
ID:PxhTPMZi | |
| | |
0225 기본 익명씨 2017/11/13(월) 23:42:04.93 | |
바로 Haskell을 시작하는 것의 단점은 어떤 Haskell 입문 서적이나 사이트도 기본적인 프로그래밍 지식을 전제로 한다는 점일까. | |
변수라든가 함수라든가 리스트라든가 맵이라든가. | |
하지만 Haskell이라기 보다는 함수형 패러다임에 가능하면 빠른 시기에 접해 두는 건 좋은 일이라고 생각해. | |
ID:dMdke9KA | |
| | |
0226 기본 익명씨 2017/11/14(화) 00:36:12.17 | |
>>220 | |
『프로그래밍의 기초』아사이 켄이치 | |
로 OCaml을 해 본 다음에 Haskell로 가는 게 가장 쉬운 입문. | |
ID:XSI09cgL | |
| | |
0227 기본 익명씨 2017/11/14(화) 00:42:09.25 | |
SICP 읽고 haskell 하는 건 괜찮아? | |
ID:Meoq/IF/ | |
| | |
0228 기본 익명씨 2017/11/14(화) 02:30:14.88 | |
Haskell은 일본어는 물론이고 | |
영어로 구글링해도 답을 못 찾는 문제에 부딪히는 비율이 | |
다른 주요 언어에 비해 너무 높아서 초보자에게는 적합하지 않아. | |
스터디 모임에 참가하거나, Stack Overflow에서 질문하거나 하는 | |
쌍방향적인 방법을 끼워 넣지 않으면 일정 수준 이상 도달하기 어려워. | |
ID:RezF4qhu | |
| | |
0229 기본 익명씨 2017/11/14(화) 11:28:30.93 | |
문제 자체가 어려워. | |
그래서 답을 못 찾아. | |
라고 해석하는 게 자연스러워. | |
문제 자체를 잘 보려고 하지 않고, SEO나 뇌의 일을 생각하는 건 엉뚱하다고 생각해. | |
ID:eZNGHHYs(1/2) | |
| | |
0230 기본 익명씨 2017/11/14(화) 19:55:37.30 | |
ocaml의 원형인 ml에서 좌절할 뻔했어. | |
f#가 재밌어. | |
ID:0CBPSjnu(1/3) | |
| | |
0231 기본 익명씨 2017/11/14(화) 20:17:46.83 | |
예를 들어 C 언어의 재미를 1이라고 하면 | |
haskell,ocaml,f#의 재미는 어느 정도야? | |
ID:WUG8DCiI | |
| | |
0232 기본 익명씨 2017/11/14(화) 21:11:59.47 | |
F#는 C# 지식을 전제로 하는 것을 허용받는 느낌이 있어. | |
젓가락질은 물론이고 지식을 얻는 데에도 허가를 필요로 하는 이상한 환경에 적응한 게 F#. | |
ID:eZNGHHYs(2/2) | |
| | |
0233 기본 익명씨 2017/11/14(화) 22:22:03.84 | |
f#는 왠지 옛날 BASIC의 함수형 언어 버전 같은 | |
느낌이 들어. | |
ID:0CBPSjnu(2/3) | |
| | |
0234 기본 익명씨 2017/11/14(화) 22:22:45.27 | |
haskell 문법이 싫어. | |
1 | |
ID:0CBPSjnu(3/3) | |
| | |
0235 기본 익명씨 2017/11/14(화) 22:58:23.51 | |
>>234 | |
예를 들어, 어떤 문법이? | |
지연 평가라든가 참조 투명성이라든가 엄격한 타입 지정이라든가, 그런 걸 싫어하는 사람은 많이 봤지만, | |
문법이 싫다는 사람은 처음 봤어. | |
ID:LvvrWEBo | |
| | |
0236 기본 익명씨 2017/11/14(화) 22:59:13.88 | |
F# 고유 라이브러리를 써 본 적이 없네. | |
문법적으로 C#보다 F#가 편해. | |
나머지는 Haskell 수준의 타입 추론만 있으면 불만 없는데. | |
Haskell은 지연 평가를 어디에 써야 할지 모르겠어. | |
ID:wshk46M/ | |
| | |
0237 기본 익명씨 2017/11/14(화) 23:31:10.95 | |
꽤 공들인 것 같네요. | |
ID:lH5WJrT0 | |
| | |
0238 기본 익명씨 2017/11/15(수) 01:49:26.34 | |
오히려 문법이 좋다. | |
최대한 불필요한 건 없애는 느낌. | |
ID:9iJNvTMA | |
| | |
0239 기본 익명씨 2017/11/15(수) 07:22:37.14 | |
들여쓰기 규칙에 가끔씩 걸리는 정도일까. | |
일단 중괄호 & 세미콜론 방식으로도 쓸 수 있지만. | |
1 | |
ID:1MOdQV57 | |
| | |
0240 기본 익명씨 2017/11/15(수) 12:36:08.57 | |
합성 함수를 왼쪽에서 오른쪽으로 쓰고 싶어. | |
뭔가 수학에서 그런 표기법도 있었던 것 같은데 잊어버렸어. | |
ID:Lu+q1695 | |
| | |
0241 기본 익명씨 2017/11/15(수) 17:52:48.58 | |
Control.Arrow의 (>>>) 연산자를 사용하면 돼. | |
($)의 인수를 바꾼 버전이라면 Data.Function의 (&) 연산자. | |
ID:C1PNunQ6(1/3) | |
| | |
0242 기본 익명씨 2017/11/15(수) 17:55:11.80 | |
>>239 | |
>일단 중괄호 & 세미콜론 방식으로도 쓸 수 있지만. | |
표준적인 코딩 스타일에서는 사용하지 않으니까... | |
코드 생성할 때는 편리하지만. | |
ID:C1PNunQ6(2/3) | |
| | |
0243 기본 익명씨 2017/11/15(수) 21:31:38.92 | |
Prelude에 인수를 바꾸는 함수가 있었던 것 같은데. | |
너무 매니악해서 잊어버렸어. | |
ID:ouxrorYh | |
| | |
0244 기본 익명씨 2017/11/15(수) 22:05:39.40 | |
바로 flip | |
전혀 매니악하지 않아... | |
ID:C1PNunQ6(3/3) | |
| | |
0245 기본 익명씨 2017/11/16(목) 19:05:18.93 | |
Haskell이 경쟁 프로그래밍에서 잘 하는 그래프 문제가 atcoder에서 마라톤 형식으로 출제되었다고 해. | |
ID:U25znXQF | |
| | |
0246 기본 익명씨 2017/11/16(목) 20:02:11.38 | |
아무도 haskell 안 쓰잖아. | |
ID:fiTPZdVA | |
| | |
0247 기본 익명씨 2017/11/16(목) 20:10:09.25 | |
쓸 물건이 아니니까. | |
ID:sSGm4ReW | |
| | |
0248 기본 익명씨 2017/11/16(목) 20:21:11.26 | |
경쟁 프로그래밍에서 Haskell 쓰던 사람들은 다 Rust로 옮겨간 것 같아. | |
ID:F5ZZYHwp(1/2) | |
| | |
0249 기본 익명씨 2017/11/16(목) 20:28:57.17 | |
경쟁 프로그래밍은 평범하게 절차형으로, 파괴적으로 하는 게 좋지. | |
입력 범위도 고정이고, Haskell로 도전할 이유가 없어. | |
ID:BHFP68Bt | |
| | |
0250 기본 익명씨 2017/11/16(목) 21:32:29.59 | |
함수형처럼 쓰면 구현이 순식간에 끝나는 간단한 문제가 꽤 있긴 해. | |
ID:F5ZZYHwp(2/2) | |
| | |
0251 기본 익명씨 2017/11/16(목) 21:43:12.74 | |
경쟁 프로그래밍보다 Project Euler에서 단련한 힘이 장래에 더 도움이 될 것 같아. | |
ID:wcx5gPy1 | |
| | |
0252 기본 익명씨 2017/11/16(목) 22:35:40.89 | |
Haskell은 알고리즘을 잘 fold 계열로 쓸 수 있으면 | |
융합 법칙 같은 걸로 아름다움과 속도를 둘 다 얻을 수 있지만 | |
잘 못 쓰면 STRef 같은 걸 쓰게 되어서 | |
왜 Haskell을 하고 있지 하는 기분이 돼. | |
1 | |
ID:1hTLcaK1 | |
| | |
0253 기본 익명씨 2017/11/17(금) 00:37:00.18 | |
스트림 처리 용도로만 쓰고 있어. | |
ID:ehxZncBr(1/2) | |
| | |
0254 기본 익명씨 2017/11/17(금) 00:38:56.41 | |
스트림 처리 용도로만 쓰고 있어. | |
https://ideone.com/kYgQxV | |
ID:ehxZncBr(2/2) | |
| | |
0255 기본 익명씨 2017/11/17(금) 11:21:31.36 | |
>>252 | |
fold 계열에 안 맞는 계산이 있다는 건 알겠어. | |
하지만 왜 그래서 STRef를 쓰게 되는지 모르겠어. | |
1 | |
ID:7fJDQyWy | |
| | |
0256 기본 익명씨 2017/11/17(금) 12:39:19.61 | |
별로 IORef나 STRef를 써도 괜찮잖아. | |
FFI도, 포인터도 있잖아. | |
하지만 State 모나드, 너는 안 돼. | |
ID:edPG1sGH | |
| | |
0257 기본 익명씨 2017/11/17(금) 16:36:27.24 | |
잘 모르지만 | |
커서 같은 클래스와 똑같이 쓸 수 있지 않아? State는. | |
State 모나드에 들어가는 게 인스턴스 생성이고 >>=가 메서드 호출. | |
ID:FedOcmK4 | |
| | |
0258 기본 익명씨 2017/11/17(금) 17:56:56.51 | |
1 s -> (a, s) | |
2 s -> (a -> s -> s) -> s | |
3 (a -> s -> s) -> s -> s | |
4 (a -> s -> s) -> s -> [a] -> s | |
1은 State이고 4는 foldr. | |
ID:oGefn9Ej | |
| | |
0259 기본 익명씨 2017/11/17(금) 20:49:15.19 | |
Haskell은 다른 사람의 코드를 읽으면 | |
▲ a b = □ . ○ $ map ■ $ (△ a) $ ▼ $ ◎ b [] | |
where | |
◎ b xs = ~긴 처리~ | |
이런 것뿐이라서 뇌가 터질 것 같아. | |
1 | |
ID:M/sHB851 | |
| | |
0260 기본 익명씨 2017/11/17(금) 20:52:24.67 | |
오히려 다른 사람의 코드도 꽤 술술 읽히는 게 Haskell의 장점 아니야? | |
ID:FaJpeIXU | |
| | |
0261 기본 익명씨 2017/11/17(금) 22:00:31.45 | |
>>259 | |
힘들게 참조 투명성이 유지되고 있으니까, 자신이 읽기 쉽도록, | |
하지만 식의 의미는 바뀌지 않도록 변형하면 돼. | |
복잡한 코드를 만났을 때, 그래도 이해하고 싶다는 욕구가 있다면, | |
일단 뇌가 터지지 않을 정도의 작은 조각으로 분해해 보면 되지 않을까? | |
ID:Tih5fc0e | |
| | |
0262 기본 익명씨 2017/11/17(금) 23:01:40.13 | |
なるほど 처리를 완전히 이해하지 못하더라도 | |
다른 사람의 코드를 자신이 읽기 쉽도록 변형할 수 있는 게 참조 투명성의 장점이구나. | |
그런 발상은 없었어. 다음에 시도해 봐야지. | |
ID:5gG4LJO3 | |
| | |
0263 기본 익명씨 2017/11/18(토) 00:48:05.98 | |
>>255 | |
fold에 안 맞는 처리라는 게 | |
요컨대 솔직하게 재귀로 쓰고 있는 루프 계산이고, | |
파괴적 업데이트를 하지 않으면 엄청나게 GC가 돌아서 힘들다는 경우가 있었어. | |
(데이터 구조에 좀 더 궁리할 여지가 있었겠지만) | |
ID:Na4dLuAE | |
| | |
0264 기본 익명씨 2017/11/18(토) 02:53:34.88 | |
실제로 재귀는 최후의 수단이지. | |
입문자에게는 기본처럼 이야기되는 수수께끼. | |
ID:/UaXWK/X | |
| | |
0265 기본 익명씨 2017/11/18(토) 08:54:42.51 | |
그렇게 최후의 수단은 아니고 기본인 건 사실. | |
ID:6/fTmZe2(1/2) | |
| | |
0266 기본 익명씨 2017/11/18(토) 12:58:42.16 | |
Haskell은 루프 없지 않았나? | |
재귀 없이 어떻게 짜는 거야? | |
1 | |
ID:TxAwv536 | |
| | |
0267 기본 익명씨 2017/11/18(토) 13:13:54.77 | |
>>266 | |
리스트라면 map이나 foldl 정도로 대응할 수 있다면 그걸 쓰면 돼. | |
사용자 정의 재귀 함수는 자유도는 높지만 종료 조건을 놓칠 가능성도 있고, 경우에 따라서는 꼬리 재귀나 정격 평가도 신경 써야 해. | |
필요한 작업보다 더 자유도가 높은 함수나 타입을 너무 많이 쓰지 않는 게 좋은 건 다른 언어와 마찬가지. | |
ID:qwbMNygr | |
| | |
0268 기본 익명씨 2017/11/18(토) 13:17:08.17 | |
최근에 쓴 120줄 정도로 함수 정의 25개를 포함한 코드를 다시 봤는데, 확실히 재귀는 한 군데도 없었어. | |
ID:6/fTmZe2(2/2) | |
| | |
0269 기본 익명씨 2017/11/18(토) 13:21:49.25 | |
요컨대 집합 연산이 있으니까 반복할 필요가 없다는 건가. | |
ID:IKdiOjx3 | |
| | |
0270 기본 익명씨 2017/11/18(토) 13:59:18.87 | |
재귀는 좋은데 함수 정의를 최상위 수준에 나열하면 마치 goto처럼 보여. | |
하지만 let은 쓰지 마, case는 쓰지 마 라고 하는 사람도 있으니까 | |
소거법으로 고차 함수겠지. | |
ID:5lmMR8NZ | |
| | |
0271 기본 익명씨 2017/11/18(토) 17:01:09.59 | |
재귀라면, 지금 haskell.org 사이트 맨 위에 있는 prime의 정의 멋지지. | |
이런 선언적이고 자기 설명적인 프로그램을 평소 코드에서도 쓸 수 있도록 정진하고 싶어. | |
1 | |
ID:Sb0VMRtj(1/2) | |
| | |
0272 기본 익명씨 2017/11/18(토) 19:18:50.08 | |
아래 코드에서 왜 오류가 나는지 모르겠습니다. | |
import Data.Typeable | |
f :: (Show a, Typeable a) => a -> String | |
f a = if typeOf a == typeRep (Proxy :: Proxy String) then a else show a | |
아래처럼 하면, 왠지 잘 됩니다. | |
f a = if typeOf a == typeRep (Proxy :: Proxy String) then read $ show a else show a | |
1 | |
ID:+f9/gyau | |
| | |
0273 기본 익명씨 2017/11/18(토) 20:12:39.81 | |
>>272 | |
앞쪽에서 then a else show a 라고 했기 때문에, a 는 String 타입밖에 될 수 없어. | |
한편, 타입 시그니처에 의해, a 는 String 타입 이외의 타입도 허용하고 있어. | |
모순되고 있어. | |
시험 삼아 앞쪽을, 타입 시그니처를 쓰지 않고 함수 정의만 써서, ghci의 :t 로 타입을 조사해 봐. | |
다음부터는, 오류 내용도 써. | |
1 | |
ID:Sb0VMRtj(2/2) | |
| | |
0274 기본 익명씨 2017/11/19(일) 00:17:21.62 | |
거기서 오류를 내 주는 게 Haskell의 좋은 점. | |
실행하기 전에 꾸짖어 준다는 건 멋져. | |
ID:K9yRHYlu | |
| | |
0275 기본 익명씨 2017/11/19(일) 07:14:38.53 | |
>>273 | |
감사합니다. | |
ID:gzKE6jPG | |
| | |
0276 기본 익명씨 2017/11/19(일) 14:34:38.43 | |
>>271 | |
수학적인 정의를 그대로 써서 움직인다는 건 확실히 멋진 부분. | |
그 대신 그 정의로는 올바른 체가 아니어서 꽤 느렸던 걸로 기억해. | |
1 | |
ID:Sx00JERW | |
| | |
0277 기본 익명씨 2017/11/19(일) 17:33:53.76 | |
제대로 쓰면 이런 느낌이 돼. | |
primes = 2:(section [3..] composites) | |
where | |
composites = union [multiples p |p<-primes] | |
multiples n = map (n*) [n..] | |
section (x:xs) (y:ys) | |
| x < y = x : (section xs (y:ys)) | |
| x == y = section xs ys | |
| x > y = section (x:xs) ys | |
union = foldr merge [] | |
where | |
merge (x:xs) ys = x:merge' xs ys | |
merge' (x:xs) (y:ys) | |
| x < y = x : merge' xs (y:ys) | |
| x == y = x : merge' xs ys | |
| x > y = y : merge' (x:xs) ys | |
2 | |
ID:FtsW9SXJ(1/3) | |
| | |
0278 기본 익명씨 2017/11/19(일) 20:38:10.15 | |
>>277 | |
멋진 코드지만 | |
줄일 수 있는 계산이 많은 만큼 아직 시행 착오 쪽이 더 빠르네. | |
primes = 2 : filter isPrime [3..] | |
isPrime x = all ((/=0) . (x`mod`)) $ takeWhile ((<=x) . (^2)) primes | |
숫자가 커지면 mod 비용이 문제가 될지도 모르지만. | |
1 | |
ID:21tWIVgE(1/2) | |
| | |
0279 기본 익명씨 2017/11/19(일) 20:53:42.98 | |
>>278 | |
멋져? 어떤 부분이 매력적이야? | |
1 | |
ID:CsMCJwUW(1/2) | |
| | |
0280 기본 익명씨 2017/11/19(일) 20:54:52.08 | |
일단 말해 두자면 >>277 은 Richard Bird가 흔한 버전을 비판받고 제대로 체를 쓴 코드야. | |
ID:FtsW9SXJ(2/3) | |
| | |
0281 기본 익명씨 2017/11/19(일) 21:08:29.23 | |
>>279 | |
mod를 사용하지 않는 부분이 멋져. | |
ID:21tWIVgE(2/2) | |
| | |
0282 기본 익명씨 2017/11/19(일) 21:13:45.49 | |
하지만 알기 어렵잖아! | |
Haskell을 몰라도 무슨 일을 하는지 | |
멋대로 알 수 있는 코드가 홍보용으로는 이상적이지. | |
그런 관점에서도 | |
메모화 피보나치 코드는 신 코드야. | |
1 | |
ID:aWoSpo3i | |
| | |
0283 기본 익명씨 2017/11/19(일) 22:01:10.75 | |
피보나치는 어디에 쓰는 경우가 있어? 경쟁 프로그래밍? | |
1 | |
ID:3wAGigTa | |
| | |
0284 기본 익명씨 2017/11/19(일) 22:04:47.47 | |
>>282 | |
그건 >>276 에서 "그 대신"이라고 제대로 단서를 달았잖아. | |
대부분의 경우, 둘 다 만족할 수는 없어. | |
메모화 피보나치는 드문 예시야. | |
>>283 | |
전혀 없어. | |
그러니까, 배워야 할 것은 피보나치 수열을 만드는 방법이 아니라, | |
선언성을 깨지 않고 메모화하는 기술 쪽인데, | |
그 책에는 그 부분에 대한 내용이 적혀 있지 않았던 것 같아. | |
메모화 피보나치는 그냥 예시로 끝났던 거 아닌가? | |
ID:CsMCJwUW(2/2) | |
| | |
0285 기본 익명씨 2017/11/19(일) 22:31:12.52 | |
"그 책"? | |
ID:FtsW9SXJ(3/3) | |
| | |
0286 기본 익명씨 2017/11/20(월) 09:32:22.51 | |
f1 = (map f1' [0..] !!) | |
where | |
f1' 0 = a | |
f1' n = ~ | |
의 형태는 | |
f2 n = foldl' f2' a [1..n] | |
where | |
f2' n = ~ | |
보다 알기 쉽다. | |
import Data.List (foldl')이라는 | |
불필요한 import가 필요 없는 게 최고야. | |
ID:2YC1SjJx | |
| | |
0287 기본 익명씨 2017/11/20(월) 10:30:22.80 | |
ghc 명령이나 ghci 명령의 출력 메시지 중에, | |
따옴표가 전각 문자로 되어 있는데, 이거 반각으로 설정할 수 없을까? | |
터미널에서 사용하고 있는 폰트 관계로 꽤 읽기 어려워. | |
ID:ybEAOaLd | |
| | |
0288 기본 익명씨 2017/11/20(월) 19:19:15.77 | |
알기 쉽다니, map 으로 폴딩 계산을 어떻게 쓸 생각이야? | |
할 수는 있지만 여분 재귀를 쓸 테고, 그러면 map 이라든가 그런 문제가 아니잖아. | |
말하자면 scanl을 map으로 재구현하는 게 그렇게 최고인 걸까... | |
1 | |
ID:i6dwbdTS | |
| | |
0289 기본 익명씨 2017/11/20(월) 23:56:42.78 | |
foo (x:xs) = ~(뭔가 함수)~ (x:xs) | |
와 | |
foo a@(x:xs) = ~(뭔가 함수)~ a | |
라고 했을 때, 앞쪽과 뒤쪽은 내부적으로 처리가 다를까? | |
2 | |
ID:POIf14n/ | |
| | |
0290 기본 익명씨 2017/11/21(화) 08:36:28.75 | |
>>289 | |
GHC의 처리 방법을 모르는 상태에서, | |
그래도 다른지 아닌지를 조사하려면, 예를 들어 다음과 같은 방법이 있어. | |
・Core를 비교한다. | |
・프로파일을 비교한다. | |
・바이너리를 비교한다. | |
ID:jCVIG8Yh | |
| | |
0291 기본 익명씨 2017/11/21(화) 11:49:36.85 | |
>>288 | |
보통이라면 리스트가 비었는지 아닌지에 따라 경우를 나눠서 2줄 정도 쓰는 걸 | |
여분 재귀라면 1줄로 쓸 수 있는 거잖아. | |
ID:Zx2Txvw4 | |
| | |
0292 기본 익명씨 2017/11/21(화) 14:03:16.67 | |
>>224 | |
C++ 제대로 할 수 있어. | |
(부스럭부스럭 | |
(휙! | |
ID:(3/37) | |
| | |
0293 기본 익명씨 2017/11/21(화) 17:45:32.32 | |
C++쨩은 그거지? | |
"부스트 쓸 거야!" 하는 C쨩의 다른 인격. | |
Haskell쨩도 보고 싶었는데... | |
ID:Ftr24wOW | |
| | |
0294 기본 익명씨 2017/11/21(화) 19:32:07.35 | |
>>289 | |
ghci -ddump-simpl 로 실행해서, 문제의 함수 정의를 let 바인딩 해 보면 | |
Core 수준에서 완전히 같다는 걸 알 수 있어. | |
뭐, 당연하지만. | |
ID:Egb8Rv0R | |
| | |
0295 기본 익명씨 2017/11/21(화) 20:06:56.72 | |
바이너리에서는 차이가 났어. | |
ID:NQH8f0G2 | |
| | |
0296 기본 익명씨 2017/11/22(수) 00:50:08.76 | |
컴파일 시간 | |
ID:ovFpIkAx(1/2) | |
| | |
0297 기본 익명씨 2017/11/22(수) 09:20:37.07 | |
f (x:xs) = (x:xs) → case 인수 of _ -> x : xs | |
g a@(x:xs) = a → | |
라면 | |
ID:CArcd2ol(1/2) | |
| | |
0298 기본 익명씨 2017/11/22(수) 09:28:04.15 | |
잘못 썼다. | |
ghci -ddump-simpl이라면 | |
f (x:xs) = (x:xs) → case 인수 of _ { (x:xs) -> x:xs } | |
g a@(x:xs) = a → case 인수 of a { (x:xs) -> a } | |
같은 게 출력되었는데... | |
ID:CArcd2ol(2/2) | |
| | |
0299 기본 익명씨 2017/11/22(수) 10:01:50.65 | |
해 봤다. | |
https://ideone.com/6r6LpA | |
@ 패턴은 반박 불가능하니까, 조금 다르네. | |
9번째 줄과 31번째 줄에서 a 는 반박 불가능하니까 와일드 취급. | |
15번째 줄과 37번째 줄도 똑같은 부분이 달라. | |
ID:KMROYMtU | |
| | |
0300 기본 익명씨 2017/11/22(수) 10:27:32.10 | |
stackoverflow에서 물어보면 전문가가 정확하게 답변해 줄 것 같아. | |
ID:DL3EaaUj | |
| | |
0301 기본 익명씨 2017/11/22(수) 18:10:15.64 | |
최적화로 사라질 거야. | |
ID:ovFpIkAx(2/2) | |
| | |
0302 기본 익명씨 2017/11/23(목) 04:31:10.10 | |
《문제》(배점 10점) | |
\n -> 1 + n | |
\f n -> f 1 n | |
\f -> f 1 . (\g n -> g 2 n) | |
은 슈퍼 콤비네이터이다. 하지만, | |
\f g -> f 1 . (\n -> g 2 n) | |
은 슈퍼 콤비네이터가 아니다. 왜 그럴까? | |
《내 답변》 | |
g 가 람다 추상의 스코프 밖에서 바인딩되어 있고, 그 스코프에서 자유 변수이다. | |
따라서 이 람다 추상은 닫힌 항이 아니므로 콤비네이터가 아니다. | |
콤비네이터도 상수도 아니므로 이 람다 추상은 슈퍼 콤비네이터가 아니다. | |
전체적으로는, 상수가 아니고, 콤비네이터이긴 하지만, 그 내부에 슈퍼 콤비네이터가 아닌 것을 포함하고 있으므로 슈퍼 콤비네이터가 아니다. | |
몇 점 받을 수 있을까요? | |
1 | |
ID:(4/37) | |
| | |
0303 기본 익명씨 2017/11/23(목) 04:34:25.61 | |
정정 (첫 번째 줄) | |
× g 가 람다 추상의~ | |
○ g 가 괄호 안의 람다 추상의~ | |
ID:(5/37) | |
| | |
0304 기본 익명씨 2017/11/23(목) 06:11:27.29 | |
(->) 는? | |
ID:S1VTy0fD | |
| | |
0305 기본 익명씨 2017/11/23(목) 09:12:04.55 | |
>>302 | |
\n1 n2 … -> E | |
가 슈퍼 콤비네이터인 것은 | |
(1)E에 등장하는 자유 변수가 n1~n2 뿐이고, 또한, | |
(2)E에 나타나는 람다 추상이 슈퍼 콤비네이터일 때, | |
그리고 그 때에 한한다. | |
\f g -> f 1 . (\n -> g 2 n) | |
의 경우, \n -> g 2 n 은 g 가 (1)을 만족하지 않으므로 슈퍼 콤비네이터가 아니고, | |
따라서 (2)에 의해, 그것을 포함하는 전체가 슈퍼 콤비네이터가 아니라는 것이 된다. | |
슈퍼 콤비네이터의 정의 내지 필요 충분 조건을 제시하지 않으면 감점하는 게 일반적. | |
1 | |
ID:GxHnNEoE(1/3) | |
| | |
0306 기본 익명씨 2017/11/23(목) 09:13:02.72 | |
표기법을 조금 잘못 썼지만 뭐, 알겠지? | |
ID:GxHnNEoE(2/3) | |
| | |
0307 기본 익명씨 2017/11/23(목) 09:16:33.82 | |
아... | |
(2)E에 나타나는 "모든" 람다 추상이 슈퍼 콤비네이터일 때, | |
이다. 중요한 부분이 빠졌네... 자야지... | |
ID:GxHnNEoE(3/3) | |
| | |
0308 기본 익명씨 2017/11/25(토) 23:17:22.88 | |
>>305 | |
Haskell High Performance Programming에는, | |
A supercombinator is either a constant, say 1.5 or ['a'..'z'], or a combinator whose subexpressions are supercombinators. | |
라고 설명되어 있는데, 이건 거짓인가요? | |
2 | |
ID:(6/37) | |
| | |
0309 기본 익명씨 2017/11/26(일) 00:11:02.93 | |
>>308 | |
그러면 | |
\x y -> (x + y) | |
조차 supercombinator가 되지 않아. | |
ID:6YUjT6hC(1/2) | |
| | |
0310 기본 익명씨 2017/11/26(일) 01:59:13.32 | |
음... | |
(x+y)에 나타나는 모든 람다 추상이란 무엇인가요? | |
1 | |
ID:(7/37) | |
| | |
0311 기본 익명씨 2017/11/26(일) 07:38:30.34 | |
>>310 | |
이 경우, (x+y)에는 람다 추상이 나타나지 않았으므로 조건 (2)는 공허하게 충족되어 있어. | |
나머지 조건 (1)도 충족되었으므로, 슈퍼 콤비네이터가 돼. | |
ID:6YUjT6hC(2/2) | |
| | |
0312 기본 익명씨 2017/11/26(일) 12:17:18.61 | |
>>308 | |
subexpression의 정의가 애매하네. | |
예를 들어 \ y -> x 는 \ x y -> x 의 subexpression인가? | |
ID:qOXUNg+f | |
| | |
0313 기본 익명씨 2017/11/26(일) 13:55:44.55 | |
순수 함수형은 물론이고 함수형 언어의 TDD 책이 없는 것 같은데, | |
Java용으로 쓰인 책에 실린 방법론 중에는, | |
Haskell에서 TDD를 할 때에도 도입할 수 있는 게 많나요? | |
예를 들어 최근에 나온 "테스트 주도 개발"(Kent Beck 저) 등. | |
처음 부분을 잠깐 읽어 보니, 굉장히 읽기 쉬운 인상을 받았기 때문에, | |
참고가 되면 좋겠다 싶었는데, 어떨까요? | |
ID:VpgSp9ND | |
| | |
0314 기본 익명씨 2017/11/26(일) 23:25:24.41 | |
다음과 같은 타입이 있다고 합니다. | |
data T = D1 {d1a :: Int, d1b :: String} | D2 {d2a :: Char, d2b :: Double, d2c :: Integer} | |
같은 데이터 생성자에서 유래된 값끼리의 비교 함수를 다음과 같이 만들려고 합니다. | |
smallerThan :: T -> T -> Bool | |
smallerThan t1@(D1 _ _) t2@(D1 _ _) = d1b t1 <= d1b t2 | |
smallerThan t1@(D2 _ _ _) t2@(D2 _ _ _) = (d2b t1, d2c t1) <= (d2b t2, d2c t2) | |
smallerThan _ _ = undefined | |
이걸, D1 이나 D2 의 정의 안의 필드 순서를 바꾸거나, 필드 수가 바뀌거나 해도, | |
smallerThan 함수의 정의는 수정하지 않아도 되도록 하고 싶은데, 방법이 있을까요? | |
요컨대, 패턴 매칭에서 데이터 생성자 이름만 매칭 테스트를 하고 싶은데... | |
1 | |
ID:k9PNaQXG | |
| | |
0315 기본 익명씨 2017/11/27(월) 00:32:04.34 | |
>>314 | |
언어 확장 PatternSynonyms,RecordWildCards 를 사용하면 될 것 같아요. | |
pattern D1_ <- D1 {..} | |
pattern D2_ <- D2 {..} | |
이렇게 하고, 나머지는 t1@D1_ t2@D1_ 처럼 패턴 매칭해서 사용합니다. | |
ID:4PKE/tcf | |
| | |
0316 기본 익명씨 2017/11/27(월) 00:44:20.26 | |
말하자면, 확장을 사용하지 않아도 빈 레코드로 패턴 매칭할 수 있었을 텐데. | |
smallerThan (D1{}) (D1{}) | |
처럼. | |
ID:ZVUfUGVW(1/2) | |
| | |
0317 기본 익명씨 2017/11/27(월) 00:51:37.87 | |
자. | |
https://paiza.io/pro...oIGfBN48OP_bZZW2qlug | |
ID:ZVUfUGVW(2/2) | |
| | |
0318 기본 익명씨 2017/11/27(월) 07:38:07.20 | |
なるほど, 빈 레코드로 매칭할 수 있다는 걸 몰랐습니다. | |
감사합니다. | |
ID:ysH8mXge | |
| | |
0319 기본 익명씨 2017/12/02(토) 10:21:44.75 | |
어떤 이름의 타입이 어떤 모듈에서 정의되어 있는지, | |
아니면 아직 정의되지 않았는지 hoogle에서 조사할 수 있나요? | |
ID:SLnkjfbB(1/2) | |
| | |
0320 기본 익명씨 2017/12/02(토) 10:53:38.35 | |
실제로 hoogle 써 보면 되잖아. | |
1 | |
ID:pAxOhb0h | |
| | |
0321 기본 익명씨 2017/12/02(토) 12:27:16.11 | |
>>320 | |
죄송합니다. 꽤 부끄러운 착각을 하고 있었습니다. | |
할 수 있습니다. | |
ID:SLnkjfbB(2/2) | |
| | |
0322 기본 익명씨 2017/12/06(수) 00:26:39.18 | |
tanakh에게는 좀 더 haskell 이야기를 듣고 싶어. | |
ID:4CiAHXyH | |
| | |
0323 기본 익명씨 2017/12/06(수) 00:47:59.63 | |
haskell보다 rust | |
ID:IlK1069D | |
| | |
0324 기본 익명씨 2017/12/06(수) 05:28:21.98 | |
tanakh에게는 지금 당장은 PEZY 이야기를 듣고 싶어. | |
ID:(8/37) | |
| | |
0325 기본 익명씨 2017/12/07(목) 18:59:33.65 | |
GHC에서, 모나드의 각 인스턴스의 (>>=) 함수 등의, 타입이 아니라 구현을 보고 싶은 경우 어디를 보면 되나요? | |
특히 IO 모나드가 신경 쓰여요. | |
ID:HvbKuO/f | |
| | |
0326 기본 익명씨 2017/12/07(목) 20:09:35.72 | |
https://hackage.hask.../System-IO.html#t:IO | |
IO의 instances 중에서 Monad IO를 선택해서 각 연산자의 source를 보면 돼. | |
1 | |
ID:RO0W0ydd(1/2) | |
| | |
0327 기본 익명씨 2017/12/07(목) 20:10:53.27 | |
https://hackage.hask...cs/src/GHC.Base.html | |
요컨대 이거네. | |
1 | |
ID:RO0W0ydd(2/2) | |
| | |
0328 기본 익명씨 2017/12/07(목) 20:30:31.60 | |
>>326 | |
>>327 | |
오오, 감사합니다. | |
거듭 죄송하지만, 이걸 보면 IO 모나드의 (>>=)는 bindIO이고 bindIO는 | |
bindIO :: IO a -> (a -> IO b) -> IO b | |
bindIO (IO m) k = IO (\ s -> case m s of (# new_s, a #) -> unIO (k a) new_s) | |
이렇게 되어 있는데, 여기서 case 식을 사용하는 건 어떤 의도가 있나요? | |
let과 같은 사용법인가요? | |
ID:g7/WaViS | |
| | |
0329 기본 익명씨 2017/12/08(금) 00:03:17.81 | |
case는 먼저 식을 평가한 다음에 패턴에 포함된 변수를 바인딩해. | |
하지만 let에는 재귀가 있을지도 모르니까 먼저 변수 바인딩을 해. | |
그 변수를 포함할지도 모르는 식은 지연 평가해. | |
1 | |
ID:Xz8G+NtW | |
| | |
0330 기본 익명씨 2017/12/08(금) 00:12:07.08 | |
>>329 | |
なるほど, 그랬군요. | |
공부가 되었습니다. 감사합니다. | |
ID:Hb+0BqaU | |
| | |
0331 기본 익명씨 2017/12/09(토) 22:36:37.66 | |
Stack LTS 9.17에 repa가 없네. | |
ID:rGCS9XaY | |
| | |
0332 기본 익명씨 2017/12/10(일) 00:28:18.35 | |
rape라면 있을지도. | |
ID:61nYDsc2 | |
| | |
0333 기본 익명씨 2017/12/13(수) 13:00:04.55 | |
stack에서 패키지를 설치할 때 컴파일하지 않게 되었다는 이야기를 들었는데, 사실인가요? | |
바이너리를 다운로드해서 설치하는 식으로? | |
구형 컴퓨터인 내 컴퓨터에서 shellcheck 설치하는데 8시간 넘게 걸렸던 악몽은 해결되는 건가? | |
ID:BNG1q+wP | |
| | |
0334 기본 익명씨 2017/12/13(수) 13:14:20.26 | |
【장례식】많은 사람이 허무하게 죽어 간다 | |
https://rio2016.5ch....ousai/1511694073/l50 | |
【응보】후지와라 사야카 '방사능 뇌는 부끄러워' → 급사 ㅋ | |
https://medaka.5ch.n...aloon/1511952872/l50 | |
【내란죄】후쿠시마에서 핵미사일을 제조하고 있었다는 의혹 | |
http://rio2016.5ch.n...aster/15114010332/l50 | |
ID:PKyEd910 | |
| | |
0335 기본 익명씨 2017/12/16(토) 19:22:25.34 | |
abc 추측의 해결로 다시 범주론이 주목을 받을 것 같다. | |
ID:6IhxD8vU | |
| | |
0336 기본 익명씨 2017/12/16(토) 19:57:24.58 | |
Haskell->범주론이라는 흐름은 있지만 | |
범주론 하고 Haskell에 관심을 가지는 사람도 있을까? | |
ID:L7fV5ivU(1/2) | |
| | |
0337 기본 익명씨 2017/12/16(토) 21:07:33.28 | |
범주론이 뭐에 도움이 되는지 모르겠지만, 고생해서 배운 사람이 휘두른 주먹이 갈 곳을 못 찾아서 | |
우연히 눈에 띈 Haskell을 때린 게 아닐까? | |
그건 길가의 돌멩이를 걷어차듯이. | |
ID:(9/37) | |
| | |
0338 기본 익명씨 2017/12/16(토) 21:27:51.46 | |
수학은 의외로 되는대로 문제가 해결되고 있어. | |
범주론에서 밝혀진 동형에 대해, 어떤 분야에서는 해결되어 있고 | |
어떤 분야에서는 빠져 있는 부분이 있다면, 그 문제는 해결되었다고 볼 수 있어. | |
이렇게 현재 뒤죽박죽인 수학을 정리하기 위해 범주론이 있다고 말할 수 있을지도 몰라. | |
따라서 범주론 자체에서 새롭게 얻을 수 있는 정보는 별로 없을 거야. | |
그러니까 연구도 별로 진행되지 않고... | |
ID:eb/bER4l | |
| | |
0339 기본 익명씨 2017/12/16(토) 22:31:29.81 | |
Ekmett씨는 어떤 입장일까? | |
ID:L7fV5ivU(2/2) | |
| | |
0340 기본 익명씨 2017/12/17(일) 08:25:26.21 | |
범주론 자체는 사물을 보는 방법과 그를 위한 기호니까, | |
범주론을 사용하고 있다는 시점에서, 자신의 응용 분야를 가지고 있겠지. | |
그 경우, | |
범주론 -> 범용 대수 | |
범주론 -> 함수형 프로그래밍 | |
범주론 -> 범주형 확률 관계 | |
범주론 -> haskell | |
처럼 관심 대상이 늘어날 뿐이고 haskell이라는 것에 의미는 없을 것 같아. | |
범주론적 접근은 다른 언어에서도 라이브러리 그룹이 여러 가지 있고. | |
ID:Rl+JU+bv | |
| | |
0341 기본 익명씨 2017/12/19(화) 05:44:21.31 | |
프로그램 산책로/Haskell 프로그래밍-정보처리학회 | |
http://www.ipsj.or.j...azine/promenade.html | |
ID:LTRWN5XC | |
| | |
0342 기본 익명씨 2017/12/19(화) 13:25:55.10 | |
bake 개발이 종료되었다는데, | |
같은 취지의 라이브러리가 또 있나요? | |
ID:fHF/6Dd9 | |
| | |
0343 기본 익명씨 2017/12/19(화) 23:53:10.07 | |
이 회사는 그렇게까지 큰 규모는 아니고 실태도 잘 모르겠는데 | |
왠지 '어떤 경향의 인간성'을 가진 직원이 현 시점에서 너무 눈에 띄잖아... | |
코이누@Altalinux | |
슈퍼컴퓨터에 대해 잘 모르는 사람이 슈퍼컴퓨터를 이야기하고 | |
어제 PEZY를 처음 알았을 법한 사람이 보조금이니 뭐니 이야기하는군요. 지옥 같은 구조네요. | |
Hideyuki Tanaka | |
@tanakh | |
진짜 특수 수사대는 "전문 기술자"가 "쓸모없는 슈퍼컴퓨터"에 "거액의 자금"이 흘러가고 있다는 제보만으로, | |
오, 그건 분명 이상하네 하고 앞서 나갔는데, 조사해도 생각했던 게 안 나와서 곤란해 하고 있는 게 아닐까. | |
야마다 테루미 | |
@telmin_orca | |
즉, 이 건은 아베 탓이니 돈의 흐름 탓이니 하면 되는 거고, | |
기술적으로 어떻다 하면 전력으로 맞는 건이라는 거다. | |
Hishinuma | |
@Hishinuma_t | |
문제의 PEZY가 100억 엔 부정 수급했다는 기사가 아무런 사과도 없이 바뀌어 있다. | |
http://www.data-max.....jp/291219_dm1545_2/ … | |
ID:IjOdIEt7 | |
| | |
0344 기본 익명씨 2017/12/20(수) 00:50:37.50 | |
먼저 네가 사기쳐서 빼돌린 돈 돌려주고 사과해. | |
ID:L78Bpqe7 | |
| | |
0345 기본 익명씨 2017/12/20(수) 18:40:30.98 | |
tanakh씨는 haskell의 일본 보급에 공헌하신 분일지도 모르지만 | |
tanakh씨가 근무하는 회사 PEZY computing은 haskell과 관계 없지 않나. | |
ID:Qm3pwgEV | |
| | |
0346 기본 익명씨 2017/12/20(수) 20:26:50.59 | |
2위는 안 되나요 진영에게 실각당했을까? | |
ID:(10/37) | |
| | |
0347 기본 익명씨 2017/12/20(수) 20:29:03.05 | |
초보라서 tanakh씨라는 분을 모르는데 어떤 분인가요? | |
ID:WuO+qrMG | |
| | |
0348 기본 익명씨 2017/12/21(목) 00:28:08.74 | |
tanakh씨는 『すごい Haskell たのしく学ぼう!』의 번역자 중 한 명인 타나카 히데유키씨의 닉네임이야. https://twitter.com/tanakh | |
참고로 다른 번역자 무라누시 타카유키씨는 올해 돌아가셨어. http://www.asj.or.jp...chives/msg07622.html | |
1 | |
ID:vVg09BnX | |
| | |
0349 기본 익명씨 2017/12/21(목) 00:42:32.53 | |
tanakh는 간단히 말해서 프로그래밍을 잘 하는 쓰레기야. | |
ID:X50/c3iq(1/2) | |
| | |
0350 기본 익명씨 2017/12/21(목) 00:46:16.46 | |
>>348 | |
지금 すごい Haskell의 번역자 소개를 다시 보니 무라누시씨의 코멘트가 엄청 진지해서 눈물 나올 것 같아. | |
큰 손실이네... | |
ID:53ydh+Pj | |
| | |
0351 기본 익명씨 2017/12/21(목) 03:19:48.25 | |
그럼 오늘의 출전자를 소개하겠습니다. | |
먼저 타나카 히데유키. | |
tanakh라는 친숙한 계정명은 대학교 시절, 풀네임인지 tanakah인지가 겹쳤는지 거부되었는지 타협해서 붙인 게 그 유래입니다. | |
고등학교 때 패미컴인지 슈퍼패미컴인지의 에뮬레이션 소프트웨어를 네트워크 대전 가능한 기능을 넣어서 개발한 (당시 네트워크 대전 기능을 가진 에뮬은 세계 최초) 사람이고 | |
이때 배웠을, 패미컴 처리 사양에 정통합니다. | |
교토대학교 공학부 (후기 일정으로 합격) 졸업, 동경대학원 졸업. | |
경쟁 프로그래밍에서는 전성기에 TopCoder에서 레드 코더까지 올라간 적이 있고, | |
대학교 시절 대학교 대항 경쟁 프로그래밍 세계 대회에 국내 대표권을 따내서 출전한 경력이 있고, | |
그때 알게 된 엘리트들과 Preferred Infrastructure (PFI)를 창업했습니다. | |
이후 몸 상태가 좋지 않아 휴직하고 PFI를 퇴사한 후, Haskell로 주식을 다루는 소프트웨어를 개발하는 벤처(?)에 취직했지만 반년 만에 또 이직했습니다. 그 이직한 곳이 바로 PEZY Computing입니다. | |
트위터에서는 농담만 하고 있지만, 그건 머리 좋은 사람 특유의 여유 같은 거고 | |
진짜 그는 밤낮으로 PEZY의 슈퍼컴퓨터로 최고의 성능을 끌어내서 세계 랭킹을 갈아치우기 위해 | |
루프마다 20나노초를 줄이는 빡빡한 튜닝 코드를 계속 쓰고 있는 진정한 프로그래머입니다. | |
사장의 사기 혐의 건으로 회사 내부 모습이 신문에 실렸을 때, '5000조 FLOPS 원해!' 패러디를 벽에 붙여 놓은 것도 그의 소행입니다. | |
すごい Haskell たのしく学ぼう의 번역자 중 한 명. | |
꿈은 이 세상에서 프로그래머 (라는 직업을 자동화 기술에 의해) 없애는 것. | |
고양이를 아주 좋아합니다. Haskell 마스터 타나카 히데유키── | |
ID:(11/37) | |
| | |
0352 기본 익명씨 2017/12/21(목) 03:46:15.12 | |
강하다. | |
ID:tLGR8mGR(1/2) | |
| | |
0353 기본 익명씨 2017/12/21(목) 04:49:39.43 | |
교토대 수석 합격 (후기) | |
ID:UMfwMR6Z | |
| | |
0354 기본 익명씨 2017/12/21(목) 06:35:36.91 | |
프로그래밍과 관계 없는 프로그래머 이야기는 다른 데서 해 줬으면 좋겠어. | |
1 | |
ID:xu21FK50 | |
| | |
0355 기본 익명씨 2017/12/21(목) 11:23:12.31 | |
여러분, 토론하세요. | |
ID:hPrP3Uhu | |
| | |
0356 기본 익명씨 2017/12/21(목) 12:28:48.94 | |
경쟁 프로그래밍에서 나오는 좌표가 계속 움직이거나 표를 만드는 문제를 Haskell로 잘 푸는 방법은 무엇일까요? | |
절차형에서는 2차원 배열을 계속 갱신하면 되지만 | |
설마 매번 take와 drop으로 리스트를 다시 만드는 건 좋지 않겠죠? | |
1 | |
ID:RWEMpEAi | |
| | |
0357 기본 익명씨 2017/12/21(목) 12:52:34.50 | |
좋지 않은지 아닌지는 컴파일러에게 물어보면 되잖아. | |
배열을 계속 갱신하면 컴파일 오류가 나나? | |
컴파일러를 못 믿겠으면 Lisp나 Erlang 같은 걸 쓰면 돼. | |
ID:xNbVMOX5(1/2) | |
| | |
0358 기본 익명씨 2017/12/21(목) 12:55:55.14 | |
함수형처럼 푸는 방법을 묻는 게 아닐까. | |
ID:tLGR8mGR(2/2) | |
| | |
0359 기본 익명씨 2017/12/21(목) 12:59:59.71 | |
경쟁 프로그래밍은 시간/공간 계산량에 엄격하니까. | |
ID:Pje/kUoS | |
| | |
0360 기본 익명씨 2017/12/21(목) 13:17:02.58 | |
경쟁 프로그래밍과 함수형 프로그래밍의 양립을 목표로 하는 건 좋은 일이라고 생각해. | |
거기에 절차형과 함수형도 양립하면 더 좋고. | |
ID:xNbVMOX5(2/2) | |
| | |
0361 기본 익명씨 2017/12/21(목) 14:20:53.11 | |
C++에서 아슬아슬한 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment