パラメータとしてリストを渡す

JPrado

整数のリストを受け取り、文字列を返す必要があるこの関数があります

generateSTR :: [Int] -> String
generateSTR ([]) = ""  
generateSTR (x) = daux (x (maximum x) x "") 
  where daux ((x:xs) mh y:ys strdib)  
           | mh == 0 = daux xs mh ys (strdib ++ "-")
           | mh <= h = daux (xs mh ys (strdib ++ "*"))
           | mh > h  = daux (xs mh ys (strdib ++ " "))
           | mh == 0 && length(lh) == 0 = daux xs (mh-1) ys (strdib ++ "\n")
        daux ([] mh lh strdib)   = strdib

問題は、エラーが発生することです。

"Parse error in pattern: (x : xs)"

しかし、私は自分が間違っていることを理解できません。

確かにそれはばかげたエラーですが、私はHASKELLの初心者で、夢中になっていると思います!。

左回り

このHaskell構文f x y z、他の言語がとして書くものとは異なる構文ではありませんf(x,y,z)それはそれと同等です、はい、しかしそれはまた同等であるという意味でのみf(z,y,x)です:あなたはまだ区別をする必要があります。

Haskell関数は通常カレーで書かれています。つまり、f「3つのパラメーターを受け入れる」場合、実際に行うことは、1つのパラメーターを受け入れ、次に別のパラメーターを受け入れ、次に別のパラメーターを受け入れることです。

f x y z ≡ ((f x) y) z

言い換えると、fは、結果が関数であり、結果が関数である関数です。その3番目の関数の結果だけが「最終結果」です。したがって、明らかにそれを書くことはできませんf (x y z)。つまり、関数とにf適用した結果に適用される、まったく異なるものなります。xyz

おそらくこれはすべて複雑に聞こえますが、カリー化によって非常に簡潔で強力なコードを記述できる状況が多くあります。それ以外の場合は、心配する必要はありません...実際にグループ化されていない括弧を記述しないでください。独立した部分式!

あなたの例に適用-これはそれを書く正しい方法です:

generateSTR :: [Int] -> String
generateSTR [] = ""  
generateSTR x = daux x (maximum x) x ""
  where daux (x:xs) mh y:ys strdib
           | mh == 0 = daux xs mh ys $ strdib ++ "-"
           | mh <= h = daux xs mh ys $ strdib ++ "*"
           | mh > h  = daux xs mh ys $ strdib ++ " "
           | mh == 0 && length lh == 0  -- note: this actually doesn't work, `lh` is not in scope here.
                     = daux xs (mh-1) ys $ strdib ++ "\n"
        daux [] mh lh strdib   = strdib

$まだ演算子に出会っていない場合:演算子の両側を括弧で囲むのと同じ効果があります。

      daux xs mh ys $ strdib ++ "-"
   ≡ (daux xs mh ys) (strdib ++ "-")

...そして私が言ったように、(f x y z) w実際にはと同じなf x y z wので、この場合はと同じdaux xs mh ys (strdib ++ "-")です。ただし、と同じでdaux (xs mh ys (strdib ++ "-"))はありません。代わりに、関数xsmhysなどに適用することを意味します。もちろんxs、リストであるため機能ません

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クラスのリストをパラメータとして渡す方法は?

分類Dev

リスト配列をパラメータとしてAndroidAsynTaskに渡します

分類Dev

PySpark-UDFにパラメーターとしてリストを渡す

分類Dev

Javaでパラメーターとしてリストを渡す

分類Dev

testng-testng.xmlのリストをパラメーターとして渡す

分類Dev

PSCredentialをパラメーターとしてスクリプトに渡す

分類Dev

ExcelVBA-関数パラメーターとしてリストを渡す

分類Dev

個々の関数パラメーターとしてリストを渡す

分類Dev

パラメータとして機能するリストを渡す

分類Dev

varargsパラメータとしてbyte []のリストを渡す方法は?

分類Dev

文字列のリストをCucumberパラメータとして渡す

分類Dev

URLパラメータとしてリストを渡すWebApiの問題

分類Dev

axiosリクエストのパラメータとして配列を渡す

分類Dev

Retrofit2URLパラメータとしてリストを渡す

分類Dev

連想配列をパラメータリストとしてスクリプトに渡します

分類Dev

連想配列をパラメータリストとしてスクリプトに渡します

分類Dev

Airflowの依存タスクのパラメーターとして文字列のリストを渡します

分類Dev

抽象基本クラスのリストをパラメーターとして使用して、クラスのリストをメソッドに渡します

分類Dev

Dartのメソッドパラメータとしてクラス静的ファクトリを渡す

分類Dev

axiosを使用してFormDataをパラメータとしてPOSTリクエストに渡す

分類Dev

Googleスプレッドシートスクリプト:関数をパラメータとして渡す

分類Dev

色リソースをパラメーターとして渡す方法(Android)

分類Dev

クラス型をパラメーターとして渡す

分類Dev

子クラスをパラメーターとして渡す

分類Dev

リストを渡し、Pythonのデフォルトパラメータとして長さを設定する

分類Dev

タスクをパラメーターとして渡す

分類Dev

HTTPリクエストの認証パラメータとしてAPIIDとAPIキーを渡す方法

分類Dev

タプルのリストをパラメーターとしてscalaのsparkudfに渡す

分類Dev

Python:クエリのパラメーターとしてリスト変数を渡す

Related 関連記事

  1. 1

    クラスのリストをパラメータとして渡す方法は?

  2. 2

    リスト配列をパラメータとしてAndroidAsynTaskに渡します

  3. 3

    PySpark-UDFにパラメーターとしてリストを渡す

  4. 4

    Javaでパラメーターとしてリストを渡す

  5. 5

    testng-testng.xmlのリストをパラメーターとして渡す

  6. 6

    PSCredentialをパラメーターとしてスクリプトに渡す

  7. 7

    ExcelVBA-関数パラメーターとしてリストを渡す

  8. 8

    個々の関数パラメーターとしてリストを渡す

  9. 9

    パラメータとして機能するリストを渡す

  10. 10

    varargsパラメータとしてbyte []のリストを渡す方法は?

  11. 11

    文字列のリストをCucumberパラメータとして渡す

  12. 12

    URLパラメータとしてリストを渡すWebApiの問題

  13. 13

    axiosリクエストのパラメータとして配列を渡す

  14. 14

    Retrofit2URLパラメータとしてリストを渡す

  15. 15

    連想配列をパラメータリストとしてスクリプトに渡します

  16. 16

    連想配列をパラメータリストとしてスクリプトに渡します

  17. 17

    Airflowの依存タスクのパラメーターとして文字列のリストを渡します

  18. 18

    抽象基本クラスのリストをパラメーターとして使用して、クラスのリストをメソッドに渡します

  19. 19

    Dartのメソッドパラメータとしてクラス静的ファクトリを渡す

  20. 20

    axiosを使用してFormDataをパラメータとしてPOSTリクエストに渡す

  21. 21

    Googleスプレッドシートスクリプト:関数をパラメータとして渡す

  22. 22

    色リソースをパラメーターとして渡す方法(Android)

  23. 23

    クラス型をパラメーターとして渡す

  24. 24

    子クラスをパラメーターとして渡す

  25. 25

    リストを渡し、Pythonのデフォルトパラメータとして長さを設定する

  26. 26

    タスクをパラメーターとして渡す

  27. 27

    HTTPリクエストの認証パラメータとしてAPIIDとAPIキーを渡す方法

  28. 28

    タプルのリストをパラメーターとしてscalaのsparkudfに渡す

  29. 29

    Python:クエリのパラメーターとしてリスト変数を渡す

ホットタグ

アーカイブ