2009-07-30 17 views
10

見積もりとは何ですか?'が使用されていますか?私はカルト関数について読んだことがあり、追加関数を定義する2つの方法を読んだ。カレー版...ハスケル関数名の意味は?

myadd' :: Int -> Int -> Int 
myadd' x y = x + y 

...しかし、それは引用なしでもうまく動作します。では、'のポイントは何ですか?

+1

名前が「Haskell関数名の意味」に改名されますか? – EFraim

+1

[Haskellの識別子のアポストロフィー]の可能な複製(http://stackoverflow.com/questions/5673916/apostrophe-in-identifiers-in-haskell) –

答えて

21

引用は、Haskellに何も意味しません。それはその関数の名前の一部です。

人々はこれを「内部」機能に使用する傾向があります。アキュムレータ引数を使ってリストを合計する関数がある場合、sum関数は2つの引数をとります。これは醜いので、sum'は2つのargsの関数になり、sumの関数はsum list = sum' 0 listのように1つのargになります。

編集、多分私はちょうどコード表示される必要があります。

sum' s [] = s 
sum' s (x:xs) = sum' (s + x) xs 

sum xs = sum' 0 xs 

sum'は末尾再帰になるように、あなたはこれを行うには、「公共のAPIは、」見ていいですので、ということ。

+0

ああ、わかりました。 ありがとうございます! – user147056

+1

'sum ''も 'sum'の' where'節に入れることができます。 – mk12

+0

あなたの再帰関数のmain関数、つまり 'sum '(x:xs)= sum(s + x)xs'を誤って呼び出すことに注意してください。型システムはここで文句を言うでしょうが、関数の型が同じであれば、それを見つけるのは難しいです。 – mk12

9

この場合、'文字は特にありません。それは識別子の一部です。換言すれば、myaddmyadd'は区別され、とは無関係の機能です。

従来、しかし、'は、いくつかの論理的な評価関係を示すために使用されています。したがって、仮想関数myaddおよびmyadd'は、myaddから導かれるように、myadd'を関連付けることができます。これは、正式な論理と学界での証明(Haskellがその根を持つ)から導かれた慣例です。私はこれが唯一の規則であることを強調しておくべきです、ハスケルはそれを強制しません。

6

引用符は、ハスケルの名前ではもう1つの許可された文字です。これは関数の変種を定義するためによく使用されます。この場合、quoteは 'prime'と発音されます。具体的には、Haskellライブラリは、変種が厳格であることを示すために引用変種を使用します。たとえば、foldlは遅延ですが、foldl'は厳密です。

この場合、見積もりは、カレー化されていないバリアントを分離するために使用されているように見えます。

16

「プライム」と発音されることが多いため、「マイアードプライム」となります。これは、通常、計算の次のステップまたは代替方法を示すために使用されます。

だから、あなたはそれはなど私は、Java、Cのためのループの中でインデックスとしてint型を使用してのような単なる習慣、

add = blah 
add' = different blah 

それとも

f x = 
    let x' = subcomputation x 
    in blah. 

を言うことができます

編集:この答えは、私がすべての単語とコードの書式を追加したので、うまくいけば助かりました。 :)これはWYSIWYGシステムではないことを忘れてしまいます!

1

他者によると、'は、Haskell自体にとって意味を持ちません。それは文字や数字のような単なる文字です。

'は、機能の代替バージョン(foldlおよびfoldl'の場合)またはヘルパー機能を示すために使用されます。場合によっては、関数名に'がいくつか表示されることもあります。関数名の末尾に'を追加するほうが、someFunctionHelpersomeFunctionStrictを書くよりははるかに簡潔です。

この記法の起源は数学と物理であり、関数f(x)がある場合、その派生物はしばしばf'(x)と表示されます。

関連する問題