質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

Q&A

解決済

1回答

513閲覧

haskellの関数の引数でリストの要素を取るやつについて

tsumugi02

総合スコア29

Haskell

Haskellは高い機能性をもった関数型プログラミング言語で、他の手続き型プログラミング言語では難しいとされている関数でも容易に行うことができます。強い静的型付け、遅延評価などに対応しています。

0グッド

0クリップ

投稿2020/05/12 13:33

編集2020/05/12 13:34

haskell初心者です。

haskellの、

haskell

1second (_:x:_) = x 2 3main = do 4 print $ second [1..5]

(https://qiita.com/7shi/items/145f1234f8ec2af923efより引用)

って、

haskell

1second x = x !! 1 2 3main = do 4 print $ second [1..5]

って書くのと同じだと思うんですが、上の方を使う利点はなにかあるのでしょうか?
よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

この例に限ってはどっちでも一緒です。
これは List の分解を説明するサンプルコードなのでそうなってるだけです。

ただし、実用的にはそのサンプルは不完全で、基本的にはパターンマッチを行う場合も Total Function を作ります。
部分的なパターンマッチを記述すると {-# OPTIONS_GHC -Wall #-} で警告が出るので、前者だと定義が不完全であることが明らかになりますが、後者はそうではないです。
(!!) は Partial Function で、リスト長を超える値や負の値を渡すと実行時例外を出すため何も考えずに使うと非常に危険な関数です。
パターンマッチの場合は「条件を満たさない場合」の記述が非常にやりやすいので、様々な分解記法を覚えておいた方が良いのです。

投稿2020/05/12 16:30

tamoto

総合スコア4103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問