プリント第4章 p.4 問4.5.1
または
プリント第4章 p.5 問4.6.1
どちらか1問を選択して下さい。
参考にするプログラム: TypeClassExample.hs ()
プリント第 6章 p.6 問6.4.2
参考: 問6.4.1の解答例
?- append([1,2], [3,4], X).
これに対して、
append([H1|X1],
Y1, [H1|Z1]):-
append(X1, Y1, Z1).
が、
H1=1,
X1=[2], Y1=[3,4], X=[1|Z1]
で適用できる。
?- append([2], [3,4], Z1).
これに対して、
append([H2|X2],
Y2, [H2|Z2]) :-
append(X2, Y2, Z2).
が、
H2=2,
X2=[], Y2=[3,4], Z1=[2|Z2]
で適用できる。
?- append([], [3,4], Z2).
これに対して、
append([],
Y3, Y3).
が、
Y3=[3,4], Z2=[3,4]
で適用できて、ゴール節が消える。
まとめると、 X = [1|[2|[3,4]]] (= [1,2,3,4])
次の C言語で記述された関数と(Cのint型と Haskellの Int型に共通する範囲において) 同等の関数を Haskellで定義せよ。
int baz(int n) { int p = 1; while (n > 0) { if (n==11) { break; } else if (n%2==0) { p*=n; n -= 2; } else { p*=n; n -= 4; } } return p; }
なお、Cの %に対応する Haskellの演算子は`mod`である。
作成した Haskellの関数と元の Cの関数の定義の対応が 明らかでない場合、簡単に説明すること。
参考にするプログラム: FactST.hs(プリント 第5章 p.13 上のプログラム) ()
プリント第7章 p.17 問7.9.1
このHTMLファイルを元にして下さい。
参考にするプログラム: Hanoi0.html, Hanoi0.js (), Hanoi.html, Hanoi.js (), Fib.html, Fib.js ()
できるだけ短く簡潔におさめて下さい。
提出〆切は、8月7日(金)の18:30です。提出場所は、香川のレターボックス(7F 学科事務前)です。 (オンラインの提出はありません。)