ねむい

睡魔と戦うのに忙しいので労働は別な人に任せたい

『Programming Elixir 1.6』の練習問題の解答ページ

www.pragprog.com

上記ページの"Exercise Solutions"というリンクから各問題の解答が書かれたPDFをダウンロードできる。
私の手元にあるのは『Programming Elixir 1.2』を和訳した『プログラミングElixir』だから細部は違うと思うが、概ね合致しているはず。

それと、コピペ防止なのか一部の問題の解答の記述がそのままElixir言語のプログラムになっていない箇所があった。
具体的には、PDF18ページ目の"Exercise: Lists and Recursion-7 (Page 114)"の解答である。

# Exercise: Lists and Recursion-7 (Page 114)
# span関数と内包表記で2からnまでの素数のリストを作る問題
# リスト内包表記の構文が'lc'と'inlist'という文字に置き換わっている
defmodule MyList do
 def span(from, to) when from > to, do: []
 def span(from, to), do: [ from | span(from+1, to) ]
 def primes_up_to(n) do
 range = span(2, n)
 # ここが動かない
 range -- (lc a inlist range, b inlist range, a <= b, a*b <= n, do: a*b)
 # こう書き直したら動いた
 range -- (for a <- range, b <- range, a <= b, a*b <= n, do: a*b)
 end
end

どうして'lc'と'inlist'という言葉が使われているかはPDFには書かれていなかった。
おそらく原著には書かれていると思われる。

さらに余談だが、『プログラミングElixir』に書かれている練習問題の解答を議論したフォーラム(https://forums.pragprog.com/forums/322)は、現在アクセスできない模様。
リダイレクト先もフォーラムサイトのようだが同じトピックは扱っていないみたい。

さらにさらに余談だが、『Programming Elixir 1.6』のエラッタ等は下記のリンクから確認できる。
devtalk.com