3

Haskell演算子%が何をするのか知りたい。グーグルで見つけるのは難しいです、私はハスケルレポートでもそれを見つけることができませんでした。

私はそれがこのコードで使用されているのを見ました:

 fi=zz.bu
 bu=zz.(:).(++"zz")
 []#zz=zz;zz#__=zz
 zZ%zz=zZ zz$zZ%zz
 zz=(([[],[]]++).)
 zZ=zipWith;z=zZ((#).show)[1..]$zZ(++)(bu%"Fi")(fi%"Bu")

から取得:https ://codegolf.stackexchange.com/questions/88/obfuscated-fizzbuzz-golf/110#110

4

2 に答える 2

8

Haskellレポートの関連セクションは次のとおりです。

Haskellは、中置記法をサポートするための特別な構文を提供します。演算子は、中置構文を使用して適用できる関数(セクション3.4)、またはセクションを使用して部分的に適用できる関数(セクション3.5)です。

演算子は、またはなどの演算子記号であるか、+` $$op`などのアクサングラーブ(バッククォート)で囲まれた通常の識別子です。たとえば、プレフィックスアプリケーションを作成する代わりにop x y、インフィックスアプリケーションを作成できますx `op` y。固定宣言が指定されていない場合、`op`デフォルトで最高の優先順位と左結合性になります(セクション4.4.2を参照)。

二重に、演算子記号は、括弧で囲むことによって通常の識別子に変換できます。たとえば、(+) x yはと同等x + yであり、foldr (*) 1 xsはと同等foldr (\x y -> x * y) 1 xsです。

つまり、Haskellの「演算子」には構文以外に特別なことは何もありません。名前が記号から作成された関数はデフォルトで中置になり、名前が英数字である関数はデフォルトで接頭辞になり、どちらも少し余分な構文を使用して他のスタイルで使用できます。

ちなみに、グーグルを使って演算子名で検索することは不可能なことが多いので、標準ライブラリで宣言されている演算子を見つけるには、ハッキングで物を見つけるための2つの検索エンジンがあります。

于 2013-01-31T20:35:40.107 に答える
5

foo一般に、次のように新しい関数を定義できます。

foo a b c = (something involving a, b, and c)

%同様に、次のように2項演算子(記号文字の任意の組み合わせから構築)を定義できます。

a % b = (something involving a and b)
于 2013-01-31T20:35:19.740 に答える