Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Haskell
Wiki community
Recent changes
Random page
HaskellWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
関数
(section)
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
===<hask>map</hask> の例=== ファーストクラス関数の威力を見られる例として、"map"関数を考えてみましょう。 ''map'': <haskell> map :: (a -> b) -> [a] -> [b] map f xs = [f x | x <- xs] </haskell> (これは[[Higher order function]]であることを覚えていてください) この関数は2つの引数をとります:"f"という"a"から"b"へ写像する関数と、"a"のリスト"xs"です。返り値は"b"のリストで、これは"xs"の中のすべての要素に"f"を適用した結果のリストになります。したがって、<hask>map square [1,1,2,3,5,8]</hask>は<hask>[1,1,4,9,25,64]</hask>というリストを返します。"map"が返した”b”のリストが関数のリストにもなりえると気づくと、だんだん面白くなってきます。 あるデータ構造(たとえば"Set")があったとして、関数<hask>insert :: Int -> Set -> Set</hask>があったとします。この関数は整数と集合を引数にとり、引数に与えた整数を引数に与えた集合に挿入してできた新しい集合を返します。そして、"mySet"と"myList"があるとして、それぞれ集合の中に集合やリストがあります。整数のリストを再帰的に要素1つづつ"myList"に挿入するような関数も書けますが、ファーストクラス関数を使えばもっと簡単に書けます。<hask>map insert myList</hask>という式を見てください。--この式が生成するリストの型はなんでしょうか?"insert"は"Int"と"Set"を引数にとりますが、"Int"しか与えられていませんので、結果のリストは集合を引数にとって、集合を返す関数のリストになっています。イメージとしては、コード<hask>map insert [1,2,3]</hask>はリスト<hask>[(insert 1) (insert 2) (insert3)]</hask>を返します。
Summary:
Please note that all contributions to HaskellWiki are considered to be released under simple permissive license (see
HaskellWiki:Copyrights
for details). If you don't want your writing to be edited mercilessly and redistributed at will, then don't submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!
Cancel
Editing help
(opens in new window)
Toggle limited content width