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

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

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

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

Q&A

解決済

1回答

1370閲覧

この関数のおかしいところを教えてください

senegals

総合スコア21

Haskell

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

0グッド

1クリップ

投稿2017/04/23 12:33

編集2017/04/27 04:09

latter m n = [[m..n],drop (n - m + 1)/2]

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

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

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

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

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

ozwk

2017/04/23 12:55 編集

何がしたいのかわからないので、何がおかしいとも言えません
Zuishin

2017/04/23 14:07

アカウント作り直しですか。へえ。
guest

回答1

0

ベストアンサー

追記:エラーを解釈しようと興味に従い回答してみたのですが、質問コメント見落としてました。
いろんな意味で役に立たない回答のようです。失礼しました。


この関数のおかしいところを教えてくださいとのことなので・・・
Haskell素人ですので解釈ミスがあると思いますが、WinGHcとリファレンスや解説記事をあさりつつ解釈を試みました。

  • 定義全体のエラー

(A)

haskell

1Prelude> latter m n = [[m..n],drop (n - m + 1)/2] 2<interactive>:82:22: error: 3 ? Couldn't match expected type[Int]4 with actual type[a0] -> [a0]5 ? Probable cause:(/)is applied to too few arguments 6 In the expression: drop (n - m + 1) / 2 7 In the expression: [[m .. n], drop (n - m + 1) / 2] 8 In an equation forlatter: 9 latter m n = [[m .. n], drop (n - m + 1) / 2]

最初のCouldn't match expected type ‘[Int]’は自分には難しいですが、
[m..n]と書かれていることからHaskellはm,nがIntであると推論したのだと思います。そこで
[[m..n],...]は[[Int]]であろうと推論したのだと思います。そこで
[[m..n], drop (n - m + 1) / 2]の2要素目の型は[Int]でなければならないのですが、
drop以下の太字の部分の式の型は[Int]ではないと文句を言っているように見えました。

  • drop (n - m + 1) / 2

drop (n - m + 1) / 2(drop (n - m + 1)) / 2と解釈されると思います。演算子よりメソッド適用の優先度が高いようですので。/とdropの定義をWinGHcにある:iというので見てみると...

(B)

haskell

1Prelude> :i (/) 2class Num a => Fractional a where 3 (/) :: a -> a -> a 4 ... 5 -- Defined in ‘GHC.Real’ 6infixl 7 / 7Prelude> :i drop 8drop :: Int -> [a] -> [a] -- Defined in ‘GHC.List’

と出ることからNum(のひとつFractional)に対してしか/は適用できないようです。dropはIntとリストを取ってリストを結果とする関数なので、drop xはリストを取ってリストを返す関数ということになろうかと思います。よってdrop x(=関数)に対する/の適用は評価できないため(B)(A)の2点からこの定義が成立しないということなのだと思います。

投稿2017/04/23 21:22

編集2017/04/27 11:58
KSwordOfHaste

総合スコア18394

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問