2

関数型プログラミング試験の勉強をしているときに、以前のテストで次の質問に出くわしました。

t1 = (reverse . take 2 . words . \ _ -> name)"!"

タスクは、ステートメントの出力を記述することです。変数 name は、「Smith, John」の形式で書かれた生徒の名前を参照します。WinHugs にステートメントを入力すると、次の出力が得られます。

["John","Smith,"]

関数の逆、テイク、ワードが何をしているのかを理解し、. オペレータがそれらを接続します。私が理解していないのは、ここで何が起こっているかです:

\ _ -> name

スラッシュ、アンダースコア、および「矢印」は何のためですか? また、引用符内の感嘆符は何をしますか? (なし?)

4

4 に答える 4

6

これは、その (唯一の) 引数 (つまり "!") を破棄して yield するラムダ関数ですname

別のラムダの例として、次は引数を 2 乗するラムダ関数です。

\x -> x * x

\、ラムダ関数を導入するために使用される表記法です。

は、_「名前を気にしない変数」を意味します。

->、ラムダ関数の引数を、その結果を指定するために使用される式から分離します。

于 2012-06-20T16:52:38.303 に答える
5

あなたが見ているのは無名関数、またはラムダ関数です (その名前はラムダ計算に由来します)。バックスラッシュは、関数を開始していることを示しています。アンダースコアは、関数が 1 つの引数を取り、それを無視することを示しています。矢印は引数リストから結果を指しています - この場合、引数を無視して名前を返すことになります。基本的に\_ -> nameは と同じconst nameです。

于 2012-06-20T16:54:32.763 に答える
3

定数無名関数: 引数のいずれかが返されnameます。

Haskell のラムダ式 (つまり無名関数) は次の形式になります。

\x -> f x

wherexは引数でありf x、この引数を使用する式です。特殊変数_は何にでも一致し、重要ではないものとして扱います。

于 2012-06-20T16:53:13.280 に答える
2

「スラッシュ」はラムダ関数の一部であり、アンダースコアはパターンで使用される「ワイルドカード」です (破棄されます)。矢印は、ラムダ関数の別の部分です。この関数\ _ -> nameは、入力に関係なく名前を返すため、"!" 関数に (未使用の) 入力を提供するだけです。

于 2012-06-20T16:57:46.770 に答える