2014年1月10日金曜日

開発環境

Real World Haskell―実戦で学ぶ関数型言語プログラミング(Bryan O'Sullivan (著)、 John Goerzen (著)、 Don Stewart (著)、山下 伸夫 (翻訳)、伊東 勝利 (翻訳)、株式会社タイムインターメディア (翻訳)、オライリージャパン)の2章(型と関数)、2.12(2つ以上の引数を持つ関数の型)、練習問題1、2、3.を解いてみる。

その他参考書籍

練習問題

1.

型情報だけから得られるlast関数の正当な振る舞いは、型aの要素のリストを引数にとり、型aの値を返すということ。

last関数で出来ないこと。

  1. aの実際の型を知ることは出来ない。
  2. aの型を要素とするリストを引数として、a以外の型の値を得ることは出来ない。

2, 3.

コード(BBEdit)

Sample.hs

module Main where

lastButOne :: [a] -> a
lastButOne xs = last (take (length xs - 1) xs)

入出力結果(Terminal, インタプリタghci)

$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :load Sample
[1 of 1] Compiling Main             ( Sample.hs, interpreted )
Ok, modules loaded: Main.
*Main> lastButOne [1,2,3,4,5]
4
*Main> lastButOne "abcde"
'd'
*Main> lastButOne [1..10]
9
*Main> lastButOne [1,2]
1
*Main> lastButOne [1]
*** Exception: Prelude.last: empty list
*Main> :quit 
Leaving GHCi.
$

短すぎるリスト(長さが1のリスト)を渡すと例外が発生する。

0 コメント:

コメントを投稿