>>942 >値の入れ替えとかで、
>a = b[2];
>b[2] = b[1];
>b[1] = a;
>とかやるのをダサイとか感じてんだと思う
入れ替えになってないだろ、常識的に考えて・・・
関数型言語がクソとか、、
モナド、継続のずっと以前に、きっと再帰も書けないんだろうなw
>関数型言語がクソとか、、
ん、誰のこと?
634
なんだ、てっきり二塩のことかと思ったよ
西尾はSchemeとかHaskellは使えるの?
それ以前にSchemeとかHaskell自体が使い物になりません。
SchemeやHaskellが使い物にならないとか、、
モナド、継続のずっと以前に、きっと再帰も書けないんだろうなw
>>959 駄目だ!やりなおし!
もっと上から目線で!
>>960 日本語の取り扱いに難がありすぎだろHaskellは。
>>960 不動点演算子とかカリー化とか
どれがどのようなものなのか教えてください
再帰とかリソースの無駄遣いだから。
テイルスープなら食ったことあるお^^
>>963 あなた、一度でもリファレンスに目を通しましたか?
最初から最後まで一読してから、わからないことがあれば質問してください。
幸運なことに、リファレンスは日本語化されています。
>>968 Haskellのコードじゃなく、概念を知りたいんだが。
数学的に不動点は分かるとしてカリー化すると
何がどうよくなるのよ。
___
. |(・∀・)|
. | ̄ ̄ ̄ ジサクジエン王国
△
△l |
__△|_.田 |△_____
|__|__門_|__|_____|_____
>>969 あなた、一度でもリファレンスに目を通しましたか?
最初から最後まで一読してから、わからないことがあれば質問してください。
幸運なことに、リファレンスは日本語化されています。
カリー化は中学生は教わっています。
カリー化って、カレーになるの?
>>969 ネタじゃなくて本当に知りたいの?
原理とかは知っているみたいだから、
実用的な面についてだけ書く。
関数を特殊化して引数を減らすのに使う。
たとえば掛け算の最初の引数2を固定化してnibai(二倍)という関数を作る。
[Haskell] nibai = (*) 2
こうすると、nibai 4とすると(*) 2 4と評価されて8になる。
同じことはC++のテンプレートでもできる。
#include <stdio.h>
int mul(int a, int b) { return a * b; }
template <int(*T)(int,int),int V> int curry(int v) { return T(V, v); }
int main() {
int(*nibai)(int) = &curry<mul, 2>;
printf("nibai(4) = %d\n", nibai(4));
return 0;
}
単純に独自の前置演算子を定義できる
ってだけ?それとも他にもバリエーション
あるの?
976 :
た:2008/02/18(月) 23:26:01
>>975 独自の前置演算子なんか定義してないぞ
(*)は単なる組み込みの掛け算だ
フツーは2*3みたいに中置で使う
演算子を前置したいときには括弧でくくって(*)と書く
だから 2*3 と (*) 2 3 は同じこと
そのときに(*)単独で取り出すと関数ポインタみたいになる
mul = (*) とすれば mul 2 3 が 2*3 と同じになる
ひょっとして文法が違うのに引っかかってるのかな?
これ見たらただの表記の違いだってわかると思う
[C言語] foo(bar, baz);
[Haskell] foo bar baz
[Lisp] (foo bar baz)
[C言語] foo(bar(baz));
[Haskell] foo (bar baz)
[Lisp] (foo (bar baz))
基本的にHaskellの書式はLispの一番外の括弧を
取っ払ったものだと考えると良いかも
括弧が嫌いな人には別の記法も用意されている
foo (bar baz) → foo $ bar baz
そんなことよりおまいらの太郎が批判されてますよ
ショック!ryokoたんは実は男!2
http://pc11.2ch.net/test/read.cgi/prog/1195741975/287-288 287 名前: 仕様書無しさん [sage] 投稿日: 2008/02/18(月) 23:35:03
はげぽんはryocotanをはてなに誘っといて、自分も逃げ出したからな
ハンドルの可愛らしさからは想像出来ないほど狡猾な奴だよ
288 名前: 仕様書無しさん 投稿日: 2008/02/19(火) 00:06:27
たしかにひげぽんのアレは酷いよな。
でも、就職先の決断の結果は自分で負うものだ。
>>976 > [Haskell] nibai = (*) 2
って定義(?)して、
nibai 4
ってやると、8が得られるって書いてたから、
nibai っていう前置演算子を定義したのかと思った。
としると、(*)はポーランド式の乗算演算子で、
(*) 2 3 とすると、2*3 と同じになって、(/) 2 3 とすると、
2/3 と同じになるわけ?
>>974 ありがとう。
プログラミング言語はもうHaskellしかありえないね。
他はカス
>>980 一度Lispとか、関数型の言語を
さらっとやってみるといい。
俺はHaskellのカリー化について
難しいかもしれないと感じていて調べもしなかった。すまぬ。
>Cの配列ってあふれるの?
あふれた時点で、segvで落ちない?
f(X, Y) という関数fがあったとして、その関数fを、
g(X)(Y) = f(X, Y) となるような関数gにすること、がカリー化。
(X, Y, は任意の引数列)
とりあえず、高階関数という概念がわかってないと、ちんぷんかんぷん
だと思うけど、そういうことをきちんと勉強する気がないと思われる
たけくんや質問厨は帰って自分の仕事をやってろ。
別にたけくんみたいな組み込み屋には
カリー化なんぞ必要ない訳で、
ものには適材適所というものが有るにもかかわらず、
いつまでも関数型言語にこだわる厨はいつまでもオナニーしてると良いよ。
関数型言語が生きてくるって分野ってどんなのですか?
WEBアプリとか
関数型言語なんていつまでたっても主流になる事はないよ。
一生黒板使って勉強してろ。
こうして形式的検証の時代に乗り遅れるエンジニアが大量生産されていった。
2008年のことであった。
まあ、組み込みですぐHaskellが役立つことはないと思うけど、
JavaScriptとかC#とか普通の人向けの言語にも
関数型の機能がどんどん入って行ってるので、
概念をかじっとくのも悪くないかなと思う。
>>980 > nibai っていう前置演算子を定義したのかと思った。
ああ、そっちね。
それは関数定義だよ。
> としると、(*)はポーランド式の乗算演算子で、
表記はポーランド式なんだけど、
これは関数と考えるんだよ。
(*)の関数としての定義は
int mul(int a, int b) { return a * b; }
みたいな感じ。
> (*) 2 3 とすると、2*3 と同じになって、(/) 2 3 とすると、
> 2/3 と同じになるわけ?
うん、そうだよ。
HaskellとC言語で大きく表記が違うのは、
関数定義が数値代入と同じように扱われる点。
たとえばC言語でさっきのmulを別の変数に代入すると、
int(*hige)(int,int) = mul;
みたいに読みにくい構文になっちゃうけど、
Haskellだと hige = mul; と関数の型を書かなくて済む。
LLみたいな動的型ではなく、コンパイラが自動的に型を静的に決める。
これを型推論という。
関数を引数で渡したり、関数を戻り値にしたりする関数を高階関数と呼ぶ。
C言語で高階関数を書くと非常に読みにくい。
関数を引数で渡す:
int foo(int(*func)(int,int),int a,int b){return func(a,b);}
関数を返す:
int(*get_mul())(int,int){return mul;}
関数を引数で受け取って、戻り値にするようなのを書くと、
とんでもないことになってしまう。
こういうのが簡単に書けるというのが関数型言語の特徴。
C言語のqsort()みたいにコールバックを渡す関数があるけど、
そういう書き方をもっとあちこちで使おうという発想。
>>983 後ろに詰め物が入ったりすることがあるので、
運が良いと(悪いと?)落ちないんですよこれが。
で、色々な怪奇現象に頭をかかえると。
なのでvalgrindなんて物に頼ったりするわけだ。
ところで次どうするの?
>ところで次どうするの?
とりあえずスレタイからスークリという言葉をなくそう。
スークリってのは、未踏に落ちた奴が腹いせにスーフリにかけて言い出したんじゃなかったか。
せめてスパクリにしとけ。
ここマ板だし天才マってのいいね
っーかさ、言語なんてたかが道具なのに何グダグダ言ってるの?
関数型言語(特にHaskell)つかって作られた有名なアプリケーションが
この世にいくつある?
CやJavaを使って作られた有名なアプリケーションが
この世にいくつある?
関数型言語厨が何を言っても、結局それが答えさ。
道具にこだわるなんて無駄無駄。
普及していない言語覚えてアプリケーション一つ書けないよりも、
普及している言語覚えて独創的なアプリケーション書いた方がマシ。
普及している言語使ってるのに独創的なアプリケーション書けないやつもいるし
>>991 >関数定義が数値代入と同じように扱われる
↑意味不明
型推論には静的も動的も(併用も)ありうる。
型推論のあるLLというのもありえなくはない。
そもそもC言語(の型)には「関数」はなくて、ポインタ使って、
それっぽいことをやっているだけなのだから(ということは
わかっているとは思うけど)、
その説明では、高階関数がわかっている人に、C言語でそれっぽい
ことをやる方法の説明にはなっても、高階関数がわかってない
人への説明にはならない。
>>996 > っーかさ、言語なんてたかが道具なのに何グダグダ言ってるの?
> 関数型言語(特にHaskell)つかって作られた有名なアプリケーションが
> この世にいくつある?
> CやJavaを使って作られた有名なアプリケーションが
> この世にいくつある?
有名じゃないが米軍の兵器にゃAdaが入っているはずだし、電話交換機じゃ
CHILLを使ってた。有名かどうかなんぞたいした指標じゃない。
オマエモナー
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。