関数型プログラミングの基礎 ラムダ関数とレキシカルスコープ ラムダから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.
%