「Wikipedia:削除依頼/関数型言語」の版間の差分

削除された内容 追加された内容
編集の要約なし
編集の要約なし
3行目:
 
* 「ラムダ式と無名関数は同じものである。」: 無名関数を表現するための構文としてラムダ式が多用されるのであり、コンビネータなどによって名前束縛を伴わない関数を定義することもできるため誤り
** 無名関数はもっぱら引数→式(例:x→x+1)のように書式され、与えられた引数に作用した結果値を返す働きをする。言語によってはラムダ式とも呼ばれている。のように修正しました。関数型言語でコンビネータとは何を指しているのかをお教えください。
 
* 「リスト処理用の高階関数であり、対象リストと無名関数を引数にする。」 mapやreduceに代表される高階関数は関数を引数に取りますが、それが無名関数でなければならないわけではありません。記事全体にわたり用語に錯誤が見られます。
** リスト処理用の高階関数であり対象リストと第一級関数を引数にする。のように修正しました。記述に誤りがあるのは自覚してますので、他の用語の錯誤とは何かをお教えください。
 
* 「型の推論はプリミティブ記述、データ構築子定義、変数束縛(Var)関数定義(Abs)関数適用(App)等式(Let)型構築子定義(Gen)型構築子宣言(Inst)といったソースコード内のあらゆる記述ポイントを拾い上げて総合解析するという専用の型推論アルゴリズムで行われる」意図の掴みがたい記述ですが、あたかも構文から型推論しているように(しかもポピュラーな型推論アルゴリズムに触れずに)記述するのは不適切に思えます。
** この項目でhindley-milnerに触れるのは説明過多になるので割愛しました。型推論はソースコード内容から行われてると思いますが、構文とはどういう意味なのかをお教えください。
 
* 「命令型言語(手続き型やオブジェクト指向)の型推論アルゴリズムは簡素化されているので」Rustのように複雑な型システムを持った"命令型言語"(私は使いたくない用語ですが)もあるので、これは[[早まった一般化]]です。
** Rustは本稿は関数型言語にしてました。
 
* 「関数型プログラムの基本文は式(expression)である。式は個体(individual)である値(value)と写像(mapping)である関数(function)の二つから構成される。関数の定義には演算子(operator)も含まれている」構文論と意味論を混同した記述なばかりか、個体(individual)という用語が説明なしに導入されています。似たような混同が「関数型言語で用いられるデータ構造の代表は、代数的データ型とS式である」という記述にも見て取れます。
** 式は値(value)と関数(function)から構成される。関数は演算子(operator)を兼ねている。値は個体(individual)、関数は写像(mapping)とも読み替えられる。のように修正しました。データ構造の代表例は代数的データ型とS式である、のどの点が誤りなのかお教えください。
 
* モナドの節に至っては、もはや説明が困難なほど支離滅裂な記述がなされています。
** これについては自分も誤りがあるのは自覚してますので一部だけでもお教えください。
 
* 「関数型プログラミングの例」では、線形時間でフィボナッチ数列を計算するコードと対比して let rec fibona num = if num < 2 then 1 else fibona (num-2) + fibona (num-1)という例が紹介されていますが、これはメモ化されていないために指数時間を要する極めて実用性を欠く例で、これを以て優位性を主張するのは明らかに無理があります。
** アルゴリズムのHello Worldと言えるフィボナッチ数を求めるプログラムは~と冒頭に書いてます。
 
* 他にも、異なる概念の混同、独自の用語、明確に誤った記述には枚挙にいとまがありません。