計算機科学のブログ

関数型プログラミングの基礎 ラムダ関数とレキシカルスコープ ラムダからletへ カスタム変数を変更可能にする ラムダ式のみによる記述

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT1(関数型プログラミングの基礎)、LESSON 3(ラムダ関数とレキシカルスコープ)、3.3(ラムダからletへ:カスタム変数を変更可能にする)のクイックチェック3-3の解答を求めてみる。

コード

-- Q3-3
overwrite :: Num p1 => p2 -> p1
overwrite x = 
    (\x -> 
        (\x ->
            (\x -> 
                (\x -> x) x
            ) 4
        ) 3
    ) 2

入出力結果(Terminal, Zsh)

% ghci
GHCi, version 8.10.4: https://www.haskell.org/ghc/  :? for help
macro 'doc' overwrites builtin command.  Use ':def!' to overwrite.
(0.00 secs, 0 bytes)
(0.00 secs, 0 bytes)
Loaded GHCi configuration from /.../.ghc/ghci.conf
Prelude
λ> :load sample3
[1 of 1] Compiling Main             ( sample3.hs, interpreted )
Ok, one module loaded.
(0.01 secs,)
*Main
λ> overwrite 1
4
it :: Num p1 => p1
(0.01 secs, 62,248 bytes)
*Main
λ> overwrite 2
4
it :: Num p1 => p1
(0.01 secs, 59,920 bytes)
*Main
λ> :q
Leaving GHCi.
%