09/07/31 23:42:55
>>594
% Prolog (2/2)
% システム運用の最初に/var/nyutaishitsu/listing.100000.proを生成して置きます
入退室管理ディレクトリ('/var/nyutsishitsu/').
入退室保存ファイル(F) :-
入退室管理ディレクトリ(Dir),
concat_atom(['ls -N ',Dir,'listing.*.pro'],S),
shs(S,L),
max(L,File),
sub_atom(File,_,6,4,A),
atom_to_term(A,N,_),
N2 is N + 1,
concat_atom(['/var/nyutaishitsu/listing.',N2,'.pro'],F),!.
597:デフォルトの名無しさん
09/07/31 23:58:20
>>594 >>595 >>596
不適切なところが少々ありました。訂正はこれらで。
URLリンク(nojiriko.asia)
598:デフォルトの名無しさん
09/08/02 09:56:28
スレリンク(tech板:743番)
# [1] 授業単元:プログラミング基礎
# [2] 問題文(含コード&リンク):
# 2つの整数をキーボードから入力し、それらの最大公約数を表示する
# プログラムを作成せよ。
# 最大公約数と、2つの数字を割り切る最大の整数のことである。
# 例えば12と18の最大公約数は6,24と48の最大公約数は24である。
599:デフォルトの名無しさん
09/08/02 10:01:52
>>598
% Prolog
t598 :-
write('最大公約数を求めます。一行にひとつ整数を入力してください : '),
get_line(Line1),atom_to_terms(Line1,N1,_),
get_line(Line2),atom_to_terms(Line2,N2,_),
appendを使って最大公約数を求める(N1,N2,X),
write_formatted('%tと%tの最大公約数は%tです\n',[N1,N2,X]).
appendを使って最大公約数を求める(N1,N2,X) :-
length(L1,N1),
length(L2,N2),
最大公約数(L1,L2,[_],[_],LX),
length(LX,X).
appendを使って最大公約数を求める(L1,L2,L,X,X) :-
not((append(L,_,L1),append(L,_,L2))),!.
appendを使って最大公約数を求める(L1,L2,L,_,X) :-
割り切れる(L1,L),
割り切れる(L2,L),
appendを使って最大公約数を求める(L1,L2,[_|L],L,X).
appendを使って最大公約数を求める(L1,L2,L,Y,X) :-
appendを使って最大公約数を求める(L1,L2,[_|L],Y,X).
割り切れる([],_) :- !.
割り切れる(L,DL) :-
append(DL,L3,L),
割り切れる(L3,DL).
600:デフォルトの名無しさん
09/08/02 12:05:02
>>598
-- Haskell では Prelude に gcd が含まれている
import Control.Monad (replicateM)
main = replicateM 2 readLn >>= print . foldl1 gcd
601:599
09/08/02 15:07:41
>>598 >>599
間違っていました。
途中、'最大公約数'/5 という述語が副目標として登場しますが、
これは、'appendを使って最大公約数を求める'/5 の間違えです。
URLリンク(nojiriko.asia) の方を見て下さい。
602:デフォルトの名無しさん
09/08/02 18:47:48
スレリンク(tech板:918番)
# 所謂覆面算で
# 英字一文字が一桁の数字(0-9)で表されるとき
# one
# + nine
# + twenty
# + fifty
# = eighty
# となる組み合わせを検索してください
# 各行の先頭の文字は0以外です
603:デフォルトの名無しさん
09/08/02 18:50:25
>>602
% Prolog
URLリンク(nojiriko.asia)
604:デフォルトの名無しさん
09/08/02 20:28:36
スレリンク(tech板:759番)
# [1] 授業単元:工学実験
# [2] 問題文(含コード&リンク):
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
#
# 課題内容: 組クラスを作成しなさい。組クラスは教員と学生からなる。
# 教員は1人で学生は最大40人とする。学籍番号で検索する機能をつけること。
# 学生には名前、住所、学籍番号(文字列型)という属性があり、教員には
# 名前、住所、教員番号(文字列型)という属性があるとする。
# 教員と学生の共通部分をまとめたクラスを定義し、それを継承する形で
# 教員クラスと学生クラスを定義せよ。
# それぞれの属性にはgetter、setter、表示関数を定義せよ。
# 継承した教員クラスで、名前を表示する関数では、「○○教授」、「○○助教授」
# などのように役職名を添えて表示する関数として、上書き定義せよ。
# これらの機能が正しく動作することを確認するmain関数(適当なサンプル)も
# あわせて作ること。
605:デフォルトの名無しさん
09/08/03 06:36:08
スレリンク(tech板:777番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# URLリンク(dl1.getuploader.com)
606:デフォルトの名無しさん
09/08/03 07:11:34
スレリンク(tech板:776番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 以下の機能を持った関数を含むプログラムを作成せよ.
# 1.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いて作成せよ.
# 2.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いないで作成せよ.
607:デフォルトの名無しさん
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).