[解決済み] Haskellで "length "関数を使用しない場合のリストの長さ
2022-02-08 21:55:55
質問
リストの長さを確認したいのですが、関数を使用せずに
length
. このプログラムを書いたのですが、うまくいきません。なぜか教えてください。ありがとうございます。
let y = 0
main = do
list (x:xs) = list (xs)
y++
list :: [Integer] -> Integer
list [] = y
解決方法は?
あなたのプログラムは、かなり " に見えます。
必須
という変数を定義しています。
y
を記述し、その後、何らかの方法で
do
を呼び出す(?)。
list
を自動的に返すような関数(?
y
をインクリメントしたい。
y
.
Haskell(そしてほとんどの関数型、宣言型)言語はそういうわけにはいきません。
- 宣言型言語では、以下のように 変数 は一度だけで、値が設定された後は、通常、その値を変更する方法はありません。
-
Haskellでは
do
は通常モナドに使用されるのに対しlength
は 純粋 関数を使用します。 -
その
let
は、式のスコープ内で変数を定義するための構文です。 - ...
Haskell(あるいは他の関数型言語)をプログラミングするためには、quot;think functional"が必要です。 数学的 を使用する方法 関数のみ .
数学で言えば、空リスト
[]
は明らかに長さが
0
. さらに、リストが空でない場合、最初の要素("head")と残りの要素("tail")が存在することになります。この場合、結果は1+末尾の長さになります。これを数式で表すと、次のようになる。
さて、この関数を次のようなHaskellのコードに簡単に変換することができる。
ownLength :: [a] -> Int
ownLength [] = 0
ownLength (_:xs) = 1 + ownLength xs
さて、Haskellでは、通常、次のようなものも使用します。 アキュムレータ を実行するために 末尾再帰 : 再帰呼び出しの際にパラメータを渡し、その都度 更新 という変数があります。再帰が終了したら、後処理をしてアキュムレータを返すこともある。
この場合、アキュムレータはこれまでに見た長さになるので、次のように書くことができる。
ownLength :: [a] -> Int
ownLength = ownLength' 0
where ownLength' a [] = a
ownLength' a (_:xs) = ownLength' (a+1) xs
関連
-
[解決済み] エラー haskell: スコープ内にありません。どういう意味ですか?
-
[解決済み] オブジェクトのためのマップ関数(配列の代わりに)
-
[解決済み] JavaScriptには、与えられた範囲内の範囲を生成する "range() "のようなメソッドがありますか?
-
[解決済み] リスト内包とラムダ+フィルタの比較
-
[解決済み] Project Eulerとの速度比較。CとPythonとErlangとHaskellの比較
-
[解決済み] 関数型プログラミングで時間関数が存在するのはなぜですか?
-
[解決済み] Haskellのリストを参照する際の「@」記号の意味は?
-
[解決済み】Haskellの入門編
-
[解決済み】bashの文字列の長さについて
-
[解決済み] GHCでコンパイルした小さなHaskellプログラムを巨大なバイナリにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Haskellでの挿入ソート
-
[解決済み] 機能における非網羅的なパターン【重複あり
-
[解決済み] Haskell Preludeの'const'は何のためにあるのか?
-
[解決済み] haskellにおけるdrop関数 - リスト内包を用いた実装
-
[解決済み] Haskellです。パターンでのパースエラー
-
[解決済み] 制約条件付き特殊化
-
[解決済み] GHCiの複数行コマンド
-
[解決済み] Haskellにおける "リフティング "とは?
-
[解決済み] レコードの単一フィールドを割り当て、残りのフィールドはコピーするための省略記法?
-
[解決済み] Haskellでグラフはどのように表現するのか?