09/08/03 07:20:42
>>606 [2]
% Prolog 見かけ再帰を含みませんが、実はfor/3やconcat_atom/3は再帰なしには書けない・・・
t606_2(N,R,X) :-
findall(N1,for(N,N1,R+1),L1),
findall(N2,for(R,N2,1),L2),
concat_atom(L1,'*',S1),
concat_atom(L2,'*',S2),
atom_to_term(S1,Term1,_),
atom_to_term(S2,Term2,_),
X is Term1 / Term2.
608:607
09/08/03 08:05:18
>>606 >>607 また違っていたようです。
t606_2(N,R,X) :-
Y is N-R+1,
findall(N1,for(N,N1,Y),L1),
findall(N2,for(R,N2,1),L2),
concat_atom(L1,'*',S1),
concat_atom(L2,'*',S2),
atom_to_term(S1,Term1,_),
atom_to_term(S2,Term2,_),
X is Term1 // Term2.
609:デフォルトの名無しさん
09/08/03 18:40:06
スレリンク(tech板:786番)
# [1] 授業単元: プログラミング実習
# [2] 問題文(含コード&リンク):台形公式により関数y=x^2とx軸によって
# 挟まれる部分のx=0~x=8までの範囲の面積を求めよ。
# 分割は4で計算せよ。
610:デフォルトの名無しさん
09/08/03 18:47:56
>>609
% Prolog
URLリンク(nojiriko.asia)
611:デフォルトの名無しさん
09/08/03 20:56:19
>>602
-- Haskell で.総当たり
import Data.List (permutations)
t602 = [xs | xs@[e,f,g,h,i,n,o,t,w,y] <- permutations [0..9],
o /= 0, n /= 0, t /= 0, f /= 0, e /= 0,
a [o,n,e] + a [n,i,n,e] + a [t,w,e,n,t,y] + a [f,i,f,t,y] == a [e,i,g,h,t,y]]
where
a xs = foldl (\s i -> 10*s + i) 0 xs
main = print $ head $ t602
612:デフォルトの名無しさん
09/08/03 21:18:14
>>606
-- Haskell で.foldl1 は末尾再帰だから許して
comb n r | r == 0 = 1
| n == r = 1
| otherwise = comb (n-1) r + comb (n-1) (r-1)
fact n = foldl1 (*) [1..n]
comb' n r = fact n `div` (fact r * fact (n-r))
main = print $ comb' 4 2
613:デフォルトの名無しさん
09/08/04 08:59:20
スレリンク(tech板:794番)
# 【質問テンプレ】
# [1] 授業単元:アルゴリズムとデータ構造
# [2] 問題文(含コード&リンク):ハッシュ(チェイン法)を使ってkeyを検索し、
# 該当するものがあればそのdataを表示する。
# (実際には検索してkeyとdataを返すまでです)
# 詳しくはこちらで URLリンク(ime.nu)
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
614:デフォルトの名無しさん
09/08/04 09:02:27
>>613
% Prolog でハッシュといえば述語のこと。
t613(Key,Data) :- 'KeyAndData'(Key,Data).
615:デフォルトの名無しさん
09/08/05 12:35:12
スレリンク(tech板:812番)
# 続けて申し訳ありません
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
#
# 引数に度(degree)をとるsin_degree関数を作成しなさい。
# math.hで宣言されているsin関数を使用せずに自作すること。
616:デフォルトの名無しさん
09/08/05 12:52:14
>>615
% Prolog
sin_degree(_角度,X) :-
R is (_角度 / 180) * 3.14159,
sin_degree(1,20,R,1.0,0.0,X).
sin_degree(M,N,_,_,X,X) :- M > N,!.
sin_degree(M,N,R,K,Y,X) :-
sin_degree(M,R,1,U),
Y2 is Y + U * K,
K2 is K * (-1),
M2 is M + 2,
sin_degree(M2,N,R,K2,Y2,X).
sin_degree(0,R,X,X) :- !.
sin_degree(N,R,Y,X) :-
Y2 is (Y * R) / N,
N2 is N - 1,
sin_degree(N2,R,Y2,X).