いろんな言語で宿題ス ..
433:デフォルトの名無しさん
10/01/26 06:04:00
>>433 (>>432) 訂正
% Prolog 訂正するのを忘れていた。
出力する([],_) :- !.
出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット),出力する(R,_表示フォーマット).
434:デフォルトの名無しさん
10/01/26 07:16:12
>>374
使用言語:J
rev_string=: ,~/
rev_string 'SEC'
CES
|. 'SEC'
CES
435:デフォルトの名無しさん
10/01/26 07:28:11
>>418
% Prolog (その一) >>421の短さに唖然!
複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された
整数ならび) :-
'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_
入力する整数の個数),
指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数
ならび),
相加平均(_整数ならび,_平均値の一),
_平均値 is truncate(_平均値の一),
平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値からの隔た
りを鍵として付加して整列された整数ならび),
整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵と
して付加して整列された整数ならび).
'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力
する整数の個数) :-
repeat,
get_integer(_入力する整数の個数),
_入力する整数の個数 =< 100,!.
指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数なら
び) :-
length(_整数ならび,_入力する整数の個数),
get_split_line([' '],_整数ならび).
436:デフォルトの名無しさん
10/01/26 07:31:28
>>418
% Prolog (その二) >>435は改行位置を間違えた行が数行あります。
平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :-
U is X - _平均値,
平均値からの隔たりにより分割する(Xs,U,_平均値,Littles,Bigs),
平均値からの隔たりによる整列(Littles,_平均値,Ls),
平均値からの隔たりによる整列(Bigs,_平均値,Bs),
append(Ls,[X|Bs],Ys) .
平均値からの隔たりによる整列([],_,[]).
平均値からの隔たりにより分割する([X|Xs],Y,_平均値,[[U,X]|Ls],Bs) :-
U is X - _平均値,
U =< Y,
平均値からの隔たりにより分割する(Xs,Y,_平均値,Ls,Bs),!.
平均値からの隔たりにより分割する([X|Xs],Y,_平均値,Ls,[[U,X]|Bs]) :-
U is X - _平均値,
U > Y,
平均値からの隔たりにより分割する(Xs,Y,_平均値,Ls,Bs) .
平均値からの隔たりにより分割する([],Y,_,[],[]).
整列した整数をスペース1つのみあけて1行で出力する([]) :- !.
整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('%t\n',[A]) :- !.
整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :-
write_formatted('%t ',[A]),
整列した整数をスペース1つのみあけて1行で出力する(R)
437:デフォルトの名無しさん
10/01/26 08:14:42
>>436
# 平均値との距離が等しい場合は値の小さな整数が優先されるものとする。
この判断が漏れている。
438:デフォルトの名無しさん
10/01/26 10:34:26
>>418 間違いが多いようなので書き直し(申し訳ない)
% Prolog (その一)
複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された
整数ならび) :-
'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_
入力する整数の個数),
指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数
ならび),
相加平均(_整数ならび,_平均値の一),
_平均値 is truncate(_平均値の一),
平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値,_平均値か
らの隔たりを鍵として付加して整列された整数ならび),
整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵と
して付加して整列された整数ならび).
'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力
する整数の個数) :-
repeat,
get_integer(_入力する整数の個数),
_入力する整数の個数 =< 100,!.
指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数なら
び) :-
length(_整数ならび,_入力する整数の個数),
get_split_line([' '],_整数ならび).
439:デフォルトの名無しさん
10/01/26 10:39:03
>>418
% Prolog (その二) >>438はやはり改行がうまくいかなかった。
平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :-
U is X - _平均値,
平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Littles,Bigs),
平均値からの隔たりによる整列(Littles,_平均値,Ls),
平均値からの隔たりによる整列(Bigs,_平均値,Bs),
append(Ls,[X|Bs],Ys) .
平均値からの隔たりによる整列([],_,[]).
平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :-
V is X - _平均値,
V < U,
平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!.
平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :-
U is X - _平均値,
X < Y,
平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!.
平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,Ls,[[U,X]|Bs]) :-
平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs) .
平均値からの隔たりにより分割する([],Y,_,[],[]).
整列した整数をスペース1つのみあけて1行で出力する([]) :- !.
整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('%
t\n',[A]),!.
整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :-
write_formatted('%t ',[A]),
整列した整数をスペース1つのみあけて1行で出力する(R).
440:デフォルトの名無しさん
10/01/26 10:43:20
すみません。行末あたりに一文字何かが入ってしまったようで改行の制御が
正しくできませんでした。
URLリンク(nojiriko.asia)
に仕上げて書いておきます。
441:デフォルトの名無しさん
10/01/26 11:06:53
スレリンク(tech板:189番)
# [1] データ構造とプログラミング
# [2]
# ツリーにノードを追加するプログラムを完成させなさい。またプログラム中 に使われている要素 mitsugi, emura, satou, yonemura, murai, nakamura, kwkt がツリー上でどのように配置され ているか書きなさい。
# 以下の添付にあるプログラムを完成させろという課題です。
# URLリンク(ime.nu)
442:デフォルトの名無しさん
10/01/26 16:43:14
スレリンク(tech板:193番)
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク):[3〜6]∫x^2 dx(これだと正解は63)を計算するプログラムを作成せよ。
# 尚、積分本体(始点と終点)と関数本体f(x)に分けること。dx=1/N N=(10,1000…10000)誤差評価を行う事。積分範囲を変更すること。x^2の関数を変更すること。
#
443:デフォルトの名無しさん
10/01/26 16:44:31
スレリンク(tech板:197番)
# [1] 計算機概論
# [2] 8bit整数が8つ与えられている。これをunsigned char配列と
# みなしa[]と名付ける。
# unsigned char 整数のor,not演算だけを用いて1<=n<=8からa[n]を
# 計算するC計算式を出力するプログラム
# 例:a[]={1,2,3,4,5,6,7,8}; 出力 return n;
# a[]={1,0,1,0,1,0,1,0}; 出力 return !(!n or 11111110b);
444:デフォルトの名無しさん
10/01/26 17:33:48
スレリンク(tech板:200番)
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
# A組、B組、C組にそれぞれn人の生徒がいて、
# A組の生徒が一列に並んでいる。
# このとき、B組の生徒をA組の生徒の隣に並ばせたいが
# なるべく隣同士で身長に差がないようにしたい。
# どうやって計算すればいいでしょう?
# 加えて、C組の生徒もB組の隣に並ばせたい場合はどうすれば?
# (身長の配列) double height_a[n], height_b[n], height_c[n];
445:デフォルトの名無しさん
10/01/26 18:07:57
>>444
% Prolog
なるべく隣同士で身長に差のない並び方(La,Lb,N,LbX) :-
findmin([S,L],ならび候補(La,Lb,N,L,S),Min),
Min = [_,LbX],!.
ならび候補(La,Lb,N,L,S) :-
順列(Lb,N,L),
findsum(U,(for(1,M,N),list_nth(M,La,A),list_nth(M,L,B),U is (B-A) ^ 2),S).
446:デフォルトの名無しさん
10/01/26 19:24:07
スレリンク(tech板:406番)
# 下のような2つのファイルから
# 平均を出したいんですがどのようにすればいいのでしょうか?
# ---file A---
# 1 87
# 2 89
# 3 40
# 4 90
# 5 33
#
# ---file B---
# 1 45
# 2 22
# 3 78
# 4 60
# 5 19
#
# ほしい結果は
# ---file C---
# 1 (87+45)/2
# 2 (89+22)/2
# 3 (49+78)/2
# 4 (90+60)/2
# 5 (33+19)/2
# です。
447:デフォルトの名無しさん
10/01/26 19:50:16
>>444
使用言語:J
よくわかりませんが、こんなふうではだめでしょうか?
A組のならびから身長の順位表をつくる。
B組をこの「A組順」でソートする。
]a=:145+?10#40
178 155 176 179 169 146 161 179 177 153
]b=:140+?10#50
178 167 186 142 165 166 172 173 181 181
a,:(/:~b)/:/:a
178 155 176 179 169 146 161 179 177 153
181 166 173 181 172 142 167 186 178 165
448:デフォルトの名無しさん
10/01/26 20:23:36
>>446
% Prolog
'2つのファイルから平均を出す'('fileA','fileB','fileC') :-
'2つのファイルから2つのならびを取り出す'('fileA','fileB',L1,L2),
fileAのデータを基礎に平均を計算してfileCに出力する('fileC',L1,L2),!.
'2つのファイルから2つのならびを取り出す'('fileA','fileB',L1,L2) :-
get_split_lines('fileA',[' '],L1),
get_split_lines('fileB',[' '],L2),!.
fileAのデータを基礎に平均を計算してfileCに出力する('fileC',L1,L2) :-
tell('fileC'),
fileAのデータを基礎に平均を計算して出力する(L1,L2),
told.
fileAのデータを基礎に平均を計算して出力する([],_) :- !.
fileAのデータを基礎に平均を計算して出力する([[N,A]|R1],L2) :-
member([N,B],L2),
C is (A + B) / 2,
write_formatted('%t (%t+%t)/2=%t',[M,A,B,C]),
fileAのデータを基礎に平均を計算して出力する(R1,L2).
449:デフォルトの名無しさん
10/01/27 02:28:09
スレリンク(tech板:233番)
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク): 入力された数字が偶数なら、trueを返す関数。それ以外ならfalse
450:デフォルトの名無しさん
10/01/27 02:30:31
スレリンク(tech板:232番)
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク): 得点を入力して以下のルールに従った成績を返す関数を実装せよ。
# 90点以上 S
# 80点以上 A
# 60点以上 B
# それ未満 C
451:デフォルトの名無しさん
10/01/27 02:41:54
>>449
% Prolog
入力された数字が偶数なら、trueを返す :-
get_integer(N),
入力された数字が偶数なら、trueを返す(N).
入力された数字が偶数なら、trueを返す(N) :- 0 is N mod 2.
452:デフォルトの名無しさん
10/01/27 02:46:26
>>449
% Prolog
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(_診断) :-
get_integer(N),
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,_診断).
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,true) :- 0 is N mod 2.
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,false).
453:デフォルトの名無しさん
10/01/27 02:48:11
>>452 (>>449) 訂正
% Prolog
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(_診断) :-
get_integer(N),
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,_診断).
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,true) :- 0 is N mod 2,!.
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,false).
454:デフォルトの名無しさん
10/01/27 02:58:21
>>450
% Prolog
得点を入力して以下のルールに従った成績を返す(_成績) :-
get_integer(_得点),
得点を入力して以下のルールに従った成績を返す(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :-
以下のルール(_得点,_,_成績).
以下のルール(_得点,'90点以上','S') :- _得点 >= 90,!.
以下のルール(_得点,'80点以上','A') :- _得点 >= 80,!.
以下のルール(_得点,'60点以上','B') :- _得点 >= 60,!.
以下のルール(_得点,'それ未満','C') :- _得点 < 60,!.
455:デフォルトの名無しさん
10/01/27 03:10:28
>>450
% Prolog 少し模索
得点を入力して以下のルールに従った成績を返す(_成績) :-
get_integer(_得点),
得点を入力して以下のルールに従った成績を返す(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が90点以上'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が80点以上'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点以上'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点未満'(_得点,_成績).
'得点が90点以上'(_得点,'S') :- _得点 >= 90,!.
'得点が80点以上'(_得点,'A') :- _得点 >= 80,_得点<90,!.
'得点が60点以上'(_得点,'B') :- _得点 >= 60,_得点<80,!.
'得点がそれ未満'(_得点,'C') :- _得点 < 60,!.
456:デフォルトの名無しさん
10/01/27 06:26:04
>>450
% Prolog
得点を入力して以下のルールに従った成績を返す(_成績) :-
get_integer(_得点),
得点を入力して以下のルールに従った成績を返す(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が90点以上の成績はS'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が80点以上の成績はA'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点以上の成績はB'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点がそれ未満のはC'(_得点,_成績).
'得点が90点以上の成績はS'(_得点,'S') :- _得点 >= 90,!.
'得点が80点以上の成績はA'(_得点,'A') :- _得点 >= 80,_得点<90,!.
'得点が60点以上の成績はB'(_得点,'B') :- _得点 >= 60,_得点<80,!.
'得点がそれ未満の成績はC'(_得点,'C') :- _得点 < 60,!.
457:デフォルトの名無しさん
10/01/27 06:29:40
>>456 訂正 成績がひとつ落ちた
'得点がそれ未満のはC' -> '得点がそれ未満の成績はC'
458:デフォルトの名無しさん
10/01/27 13:39:12
>>449
使用言語:Io
Number even:=method(self % 2 == 0)
Io> 23 even
==> false
Io> 24 even
==> true
459:デフォルトの名無しさん
10/01/27 17:24:57
>>450
使用言語:J
f=: monad def 'y{''CBAS''#~2-~/\0 60 80 90 101'
f 0
C
f 59
C
f 60
B
f 79
B
f 80
A
f 89
A
f 90
S
f 100
S
460:デフォルトの名無しさん
10/01/27 17:34:13
>>449
使用言語:J
even=: 0=2&|
even 23
0
even 24
1
461:デフォルトの名無しさん
10/01/27 17:37:51
>>449
使用言語:Scilab
-->deff('r = even(n)', 'r = modulo(n, 2) == 0')
-->even(23)
ans =
F
-->even(24)
ans =
T
462:デフォルトの名無しさん
10/01/27 17:56:26
スレリンク(tech板:245番)
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
# キーボードから正の整数nを入力し、n!を計算して画面表示するプログラムを
# 作成せよ。ただし、階乗を計算する関数のプロトタイプを「void kaiyo(int , int *)」
# とし、第1引数にnを、第2引数に計算結果を格納する変数のポインタを指定すること。
#
463:デフォルトの名無しさん
10/01/27 19:42:34
>>449
使用言語:Arc
arc> (even 5)
nil
arc> (even 4)
t
arc> (def even? (n) (is (mod n 2) 0))
#<procedure: even?>
arc> (even? 23)
nil
arc> (even? 24)
t
464:デフォルトの名無しさん
10/01/27 20:12:02
>>449
使用言語:
(%i26) even(n):=is(mod(n,2)=0);
(%i27) even(23);
(%o27) false
(%i28) even(24);
(%o28) true
(%i29) f(n):=mod(n,2)=0;
(%i30) f(23);
(%o30) 1 = 0
(%i31) f(24);
(%o31) 0 = 0
(%i32) if f(4) then "even" else "odd";
(%o32) even
isがないとtrue,falseの表示にならないようだ。
465:デフォルトの名無しさん
10/01/27 20:16:34
>>464
書き忘れましたが、使用言語は maxima です。
466:デフォルトの名無しさん
10/01/27 21:03:29
>>449
使用言語:scheme(Gauche)
gosh> (even? 23)
#f
gosh> (even? 24)
#t
gosh> (define (even n) (= (modulo n 2) 0))
even
gosh> (even 23)
#f
gosh> (even 24)
#t
467:デフォルトの名無しさん
10/01/27 21:12:54
>>449
使用言語:Common Lisp(xyzzy)
(evenp 23)
nil
(evenp 24)
t
(defun even (n) (= (mod n 2) 0))
even
(even 23)
nil
(even 24)
t
468:デフォルトの名無しさん
10/01/28 00:53:54
>>449
使用言語:十進BASIC
論理式は制御構文でしか使えないので真偽値を受け渡しすることはできないようだ。
なので、真偽値を返す関数は、真のときの値、偽のときの値を適当にきめてやりとりするしかないみたい。
ここでは、真のとき1を偽のとき0を返すようにした。
FUNCTION even(n)
IF MOD(n,2)=0 THEN
LET even=1
ELSE
LET even=0
END IF
END FUNCTION
PRINT even(23)
PRINT even(24)
END
実行結果
0
1
469:デフォルトの名無しさん
10/01/28 05:13:18
>>431
% Prolog Prologでリングバッファは表現できるが無意味。究竟Prologのキューはスタック操作。
'New'(X-X).
'Enque'(_要素,X-[_要素|Y],X-Y).
'Deque'(_要素,[_要素|X]-Y,X-Y).
'Empty'(X-Y) :- X == Y.
キュー操作 :- 'New'(Q1),キュー操作機能選択(Q1).
キュー操作.
キュー操作機能選択(Q1) :-
get_line(_機能選択),
キュー操作機能選択(_機能選択,Q1,Q2),
キュー操作機能選択(Q2),!.
キュー操作機能選択(q,_,_) :- !,fail.
キュー操作機能選択(d,Q1,Q2) :- 'Deque'(_要素,Q1,Q2), write_formatted('%t\n',[_要素]),!.
キュー操作機能選択(s,Q1,Q1) :- キュー表示(Q1),!.
キュー操作機能選択(A,Q1,Q2) :- atom_to_term(A,N,_),'Enque'(N,Q1,Q2),!.
キュー表示(X-X) :- !.
キュー表示(X-Y) :- \+(var(X),var(Y),キュー表示(X-[Y]),!.
キュー表示(X-Y) :- \+(var(Y)),
append(U,Y,X),
concat_atom(U,' ',S),
write_formatted('%t\n',[S]),!.
470:469
10/01/28 05:16:26
ついでに言うとこれは説明不能ww ということは、
重リストを使ったキュー操作はあまり推奨できるプログラムではないのかも。
471:デフォルトの名無しさん
10/01/28 05:40:10
>>462
% Prolog 関数名kaiyoはたぶんミスパンチと思うので
kaijo(0,1) :- !.
kaijo(N,X) :- N1 is N - 1,kaijo(N1,Y),X is N * Y.
472:デフォルトの名無しさん
10/01/28 06:00:53
>>462
% Prolog
'キーボードから正の整数nを入力し、n!を計算して画面表示する' :-
repeat,
催促付き整数入力('正の整数を入れてください :',N),
N >= 0,
kaijo(N,X),
write_formatted('%tの階乗は%tです。\n',[N,X]),!.
kaijo(0,1) :- !.
kaijo(N,X) :- N1 is N - 1,kaijo(N1,Y),X is N * Y.
473:デフォルトの名無しさん
10/01/28 06:27:18
>>426
% Prolog もっと複雑な問題らしい。一応基礎部分ということで。
累乗の計算の逆を行うプログラムの基礎部分(A,A ^ 1) :- atomic(A),!.
累乗の計算の逆を行うプログラムの基礎部分((A * A),A ^ 2) :- atomic(A),!.
累乗の計算の逆を行うプログラムの基礎部分((B * A) * A,A ^ N) :-
累乗の計算の逆を行うプログラムの基礎部分((B * A),A ^ N1),
N is N1 + 1,!.
474:デフォルトの名無しさん
10/01/28 07:38:10
>>426
% Prolog >>473は利用しないことになってしまった。
累乗の計算の逆を行うプログラム(_乗算項,X) :-
乗算項をならびに変換(_乗算項,L1),
quicksort(L1,L2),
累乗の計算の逆を行うプログラム項構成(L2,X).
乗算項をならびに変換(A,[A]) :- atomic(A),!.
乗算項をならびに変換((B*A),[A|R]) :-
atomic(A),
乗算項をならびに変換(B,R).
累乗の計算の逆を行うプログラム項構成([A],A) :- !.
累乗の計算の逆を行うプログラム項構成([A,A|R1],A ^ N) :-
累乗の計算の逆を行うプログラム項部分構成([A,A|R1],[],A ^ N),!.
累乗の計算の逆を行うプログラム項構成([A,A|R1],A ^ N * Y) :-
累乗の計算の逆を行うプログラム項部分構成([A,A|R1],R,A ^ N),!.
累乗の計算の逆を行うプログラム項構成(R,Y),!.
累乗の計算の逆を行うプログラム項構成([A,B|R1],A * Y) :-
累乗の計算の逆を行うプログラム項構成([B|R1],Y),!.
累乗の計算の逆を行うプログラム項部分構成([A],[],A ^ 1) :- !.
累乗の計算の逆を行うプログラム項部分構成([A,A|R1],R,A ^ N) :-
累乗の計算の逆を行うプログラム項部分構成([A|R1],R,A ^ N1),
N is N1 + 1,!.
累乗の計算の逆を行うプログラム項部分構成([A,B|R],[B|R],A ^ 1) :- !.
475:デフォルトの名無しさん
10/01/28 15:26:00
>>449
使用言語:tcl
% proc even {n} {expr $n%2==0}
% even 23
0
% even 24
1
476:デフォルトの名無しさん
10/01/28 15:28:48
>>449
使用言語:Xtal
ix:004>even:fun(n) n%2==0;
ix:005>even(23).p;
false
ix:006>even(24).p;
true
477:デフォルトの名無しさん
10/01/28 15:59:40
>>449
使用言語:Scala
scala> def even(n:Int):Boolean={n%2==0}
even: (Int)Boolean
scala> even(23)
res3: Boolean = false
scala> even(24)
res4: Boolean = true
478:デフォルトの名無しさん
10/01/28 16:17:01
>>449
使用言語:Clojure
user=> (even? 23)
false
user=> (even? 24)
true
user=> (defn even [n] (= (mod n 2) 0))
#'user/even
user=> (even 23)
false
user=> (even 24)
true
479:デフォルトの名無しさん
10/01/28 18:09:44
>>449
使用言語:R
> even <- function(n){n%%2==0}
> even(23)
[1] FALSE
> even(24)
[1] TRUE
480:デフォルトの名無しさん
10/01/28 18:29:39
>>453
問題がfalseとなっているから仕方ないのかも知れないが、
failにしておいた方が無難。call(fail)で真偽値に戻せるから。falseだと、
K-Prolog Compiler version 6.0.4 (C) KLS Research, Inc.
15: ?- fail.
no
16: ?- false.
existence_error: "procedure" found at "false"
Culprit: "false/0"
17: ?-
のようなことになる。
481:デフォルトの名無しさん
10/01/28 22:51:35
スレリンク(tech板:296番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 10個の要素を持つ動的な整数配列を作るプログラムを作成しなさい。
# 動的な配列へのポインタを整数ポインタに代入しなさい。
# 次に、ポインタ算術または配列の添字を使って、1から10までの値を配列を構成する整数に代入しなさい。
# 最後に、代入した値を表示し、メモリを解放しなさい。
#
482:デフォルトの名無しさん
10/01/28 22:53:22
スレリンク(tech板:299番)
# [1] 授業単元:コンピュータリテラシー
# [2] 問題文(含コード&リンク):
# あるファイルの名簿を呼びだし、名前もしくは名字で検索しその結果を新しいファイルに保存する。あるファイルの名簿は特に決められていない。
# URLリンク(ime.nu)
483:デフォルトの名無しさん
10/01/28 22:57:40
スレリンク(tech板:307番)
# [1] Cプログラミング入門:
# [2] URLリンク(ime.nu)
# 次のプログラムを作成し二つのファイルを提出せよ。
# 1:0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に
# 格納せよ.(乱数使用:学籍番号で初期化)学籍番号:200
# 2:次に異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納せよ.
# 3:ソート方法 A を用いて配列 COM,MAN の要素をそれぞれ小さい
# 順に並べよ.
# 4:配列 COM に含まれる配列 MAN の数字の個数 count を求めよ.
# 5:最後に,配列 COM,MAN の全要素,変数 count を
# result.out に書き込め.
# 6:出力形式は自由とするが,main 関数内は 10 行以内にすること.
# ソート方法A
# 1 :作業用の配列として、要素が 100 個の int 型の配列 Work を用意
# する.
# 2 :配列 Work の各要素は、0 に初期化する.
# 3 :ソートしたい配列 x の要素を順番に読んで、Work[ その値 ] を +1
# する.
# 4 :作業3を全ての x の要素について行った後、Work の要素を小さい
# ほうから順番に読んで、Work の値が 0 でなければ、x に書き戻し
# ます。
484:デフォルトの名無しさん
10/01/28 22:59:38
スレリンク(tech板:309番)
# [1] C言語プログラミング演習(大学任意科目)
# [2] コマンドラインで指定された各テキストファイルに対して個別に以下の処理を行うCプログラムを作成
# ☆テキストファイルを通読し、各行のインデント深度の最大値を求める(それをNとおく)
# ☆テキストファイルの先頭から再度読み出し、それぞれの行についてインデント深度がnなら
# ば、インデント深度をN-nに変更したものを標準出力する。
# ☆新しいテキストファイルのNが判明した時点で、その改行とファイル名、改行を標準出力する。
# ここでインデント深度とは、行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合
# 深度=nとする。
485:デフォルトの名無しさん
10/01/28 23:04:35
スレリンク(tech板:315番)
# [1] 授業単元:プログラミング応用
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
#
# ■問題1
# pnm(pbm, pgm, ppm)フォーマット画像ファイルを読み込み、
# 左右を反転させた画像をpnmフォーマット画像ファイルとして
# 保存するプログラムを作成せよ.
#
# ■問題2
# 256(横)×256(縦)の画素数をもつpgmフォーマット画像の階調度を
# 7段階(128階調,64階調,32階調,16階調,8階調,4階調,2階調)で変換し,
# 各階調に変換したときの画像(7枚)をpgmフォーマット画像として
# 保存するプログラムを作成せよ.
#
# ※問題1,2共に、アスキー形式とバイナリー形式のpnmフォーマット画像を
# 処理できるプログラムとすること
486:デフォルトの名無しさん
10/01/28 23:38:02
>>481
% Prolog 例によって配列はリスト(ならび)とします。
'10個の要素を持つ動的な整数配列(ならび)を作り、1から10までの整数を代入し、値を表示し、メモリを解放する' :-
length(L,10),
ならびに値を設定する(L),
write_formatted('%t\n',[L]),
fail.
'10個の要素を持つ動的な整数配列(ならび)を作り、1から10までの整数を代入し、値を表示し、メモリを解放する'.
ならびに値を設定する(L) :-
ならびに値を設定する(1,L).
ならびに値を設定する(10,[10]) :- !.
ならびに値を設定する(N,[N|R]) :- N2 is N + 1,ならびに値を設定する(N2,R).
487:デフォルトの名無しさん
10/01/29 04:46:44
>>482
% Prolog
名簿を呼びだし、名前で検索しその結果を新しいファイルに保存する(_名簿ファイル,_出力ファイル,_検索する名前) :-
名簿を呼び出し(_名簿ファイル,L),
名前で検索しその結果を新しいファイルに保存する(_出力ファイル,L,_名前),!.
名簿を呼び出し(_名簿ファイル,L) :-
get_split_lines(_名簿ファイル,[' ',','],L),!.
名前で検索しその結果を新しいファイルに保存する(_出力ファイル,L,_名前) :-
tell(_出力ファイル),
名前で検索しその結果を新しいファイルに保存する(L,_名前),
told.
名前で検索しその結果を新しいファイルに保存する([],_) :- !.
名前で検索しその結果を新しいファイルに保存する([[_名字,_名前,_住所,_電話番号]|R],_名前) :-
write_formatted('%t,%t,%t,%t\n',[_名字,_名前,_住所,_電話番号]),
名前で検索しその結果を新しいファイルに保存する(R,_名前),!.
名前で検索しその結果を新しいファイルに保存する([_|R],_名前) :-
名前で検索しその結果を新しいファイルに保存する(R,_名前),!.
488:デフォルトの名無しさん
10/01/29 05:29:08
>>483
% Prolog 1:
'1:0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(COM) :-
'COMを確保する'(COM),
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'([],COM).
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(COM,COM) :- !.
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(L1,COM) :-
'0〜99の数字'(N),
\+(member(N,L1)),
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'([N|L1],COM),!.
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(L1,COM) :-
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(L1,COM),!.
'COMを確保する'(COM) :- length(COM,30).
'0〜99の数字'(N) :- N is random mod 100.
489:デフォルトの名無しさん
10/01/29 06:03:17
>>483
% Prolog 2:
'2:次に異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納せよ'(MAN) :-
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN) :-
'MANを確保'(MAN,6),
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'([],MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN,MAN) :- !.
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN) :-
get_integer(N),
\+(member(N,L1)),
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'([N|L1],MAN) :- !.
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
490:デフォルトの名無しさん
10/01/29 06:08:59
>>483 訂正
% Prolog 2: 順番にという以上入力と逆順になってはマズイ。
'2:次に異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納せよ'(MAN) :-
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN) :-
'MANを確保'(MAN,6),
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'([],MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN,MAN) :- !.
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN) :-
get_integer(N),
\+(member(N,L1)),
append(L1,[N],L2),
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L2,MAN) :- !.
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
491:デフォルトの名無しさん
10/01/29 07:58:33
>>483
% Prolog 3: ソート方法AはPrologのリスト(ならび)仕様に書き換えました。効率は大変悪い。
'ソート方法 A を用いて配列 COM,MAN の要素をそれぞれ小さい順に並べる'(L1,L2) :-
ソート方法A(L1,L2).
ソート方法A(L1,L2) :-
'作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work),
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(L1,Work),
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(L1,L2).
'作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work) :-
length(Work,100).
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([],Work) :- !.
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([N|R1],Work) :-
list_nth(N,Work,1),
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(R1,Work),!.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([],[]) :- !.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([A|R1],[A|R2]) :-
\+(var(A)),
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(R1,R2),!.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([V|R1],L2) :-
var(V),
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(R1,L2).
492:デフォルトの名無しさん
10/01/29 09:40:48
>>488->>491 全部に間違いがありました。
今夕までに
URLリンク(nojiriko.asia) から
URLリンク(nojiriko.asia) までに
訂正分を書き込んで置きます。
493:デフォルトの名無しさん
10/01/29 10:43:20
>>483
% Prolog 4:
'配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,[],[]) :- !.
'配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,[N|R1],[[N,Count]|R2]) :-
count(member(N,COM),Count),
'配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,R1,R2).
count([],0) :- !.
count([_|R],Count) :- count(R,Count1),Count is Count1 + 1,!.
count(P,Count) :- findsum(1,P,Count).
494:デフォルトの名無しさん
10/01/29 10:49:26
>>483
% Prolog 4: どうやら、Countとは含まれる総数のことらしい。それで・・
'4:配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,MAN,Count) :-
'配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,MAN,L),
findsum(M,member([_,M],L),Count),!.
495:デフォルトの名無しさん
10/01/29 12:14:39
スレリンク(tech板:580番)
# 下記のプログラムを関数を用いて実行したいのですが、どのようにすれば良いでしょうか?
# 回答(できたら簡単な解説)の明記をお願いします。
#
# 問題1:入力したプログラムから以下のように出力するプログラムを作成する。
# (実行結果例)
# 文字列を入力: 今日は、晴れです。
#
# 今日は、晴れです。
# 日 す
# は で
# 、 れ
# 晴 晴
# れ 、
# で は
# す 日
# 。すでれ晴、は日今
#
496:デフォルトの名無しさん
10/01/29 12:16:06
スレリンク(tech板:580番)
# 問題2:ファイル入力した漢字データ(全角)を読み込み、行数を数えながら逆から表示するプログラム。
# (実行結果例)
# (例として次のような C:\test2.txtを入力する)
# 今日は、晴れです。昨日は、雨で
# した。明日は、曇でしょう。明後
# 日は、快晴でしょうか。 ←の文章を以下のようなプログラムにする。
#
# ファイル名を入力してください:C:\test2.txt
#
# 1:で雨、は日昨。すでれ晴、は日今
# 2:後明。うょしで曇、は日明。した
# 3:。かうょしで晴快、は日
#
497:デフォルトの名無しさん
10/01/29 12:17:44
スレリンク(tech板:581番)
# 問題3:ファイルのデータ(英文)を読み込み、一行毎の文字数(スペースも含む)
とワード数を数えるプログラム。
# (実行結果例)
# (例として次のような C:\test3.txtを入力する)
# And friends just can't be found
# Like a bridge over troubled water
# I will lay me down ←の文章を以下のようなプログラムにする。
#
# ファイル名を入力してください:C:\test3.txt
# 1:And friends just can't be found
# ⇒31文字、6ワード
# 2:Like a bridge over troubled water
# ⇒33文字、6ワード
# 3:I will lay me down
# ⇒18文字、5ワード
#
498:デフォルトの名無しさん
10/01/29 12:19:00
スレリンク(tech板:581番)
# 問題4:1月1日が金曜日の平年(たとえば2010年)について、月日の入力データから、曜日を求めるプログラム。
# (実行結果例)
# 月を入力してください:9
# 日を入力してください:15
# 9月15日は、水曜日です。
#
# 以上4問です。どうか回答よろしくお願い致します
499:デフォルトの名無しさん
10/01/29 12:32:53
スレリンク(db板:471番)
# 【質問テンプレ】
# ・DBMS名とバージョン: SQLite 3
# ・テーブルデータ:長いため下記に記載
# ・欲しい結果:RSSリーダ(brief)のデータ(*.sqlite)から特定の記事データを削除したいです。
# ・説明:長いため下記に記載
#
# ●テーブルデータ
# =======================================================================================================================
# ■entries
# | id | feedID | primaryHash | secondaryHash | providerID | entryURL | date | read | updated | starred | deleted | bookmarkID |
# -----------------------------------------------------------------------------------------------------------------------
# ■entries_text
# | title | content | authors | tags |
# -----------------------------------------------------------------------------------------------------------------------
# ■entries_text_content
# | docid | c0title | c1content | c2authors | c3tags |
# -----------------------------------------------------------------------------------------------------------------------
# ■sqlite_sequence
# | name | seq |
# =======================================================================================================================
500:デフォルトの名無しさん
10/01/29 12:34:45
スレリンク(db板:472番)
# 1.【entries】テーブルの[deleted]フィールドが「 2 」の場合に、そのレコードを削除。
#
# 2.同時に、【entries_text_content】テーブルの[docid]フィールドが、1.で削除した
# [id]フィールドと同じ値のレコードも削除。
#
# 3.更に同時に、【entries_textテーブル】から、1.で削除した[idフィールド]の値(数字)と
# 同じレコード番号のレコードを削除。 ※idフィールドがない為
#
# 4.その後、下記のフィールドの値を、1・2・3〜とリナンバリングしたい。
# 【entries】テーブルの[id]フィールド
# 【entries_text_content】テーブルの[docid]フィールド
#
# 5.そして、1.2.3.の三つのテーブルのレコード数がどれも同じ数だけあるか確認。
#
# 6.最後に、【sqlite_sequence】テーブルの[seq]フィールドに5.で確認したレコード数を
# 設定したい。
501:デフォルトの名無しさん
10/01/29 13:11:44
>>483
% Prolog 5:
'配列 COM,MAN の全要素,変数 count をresult.out に書き込め'(COM,MAN,Count) :-
tell('result.out'),
write_formatted('%q.\n',['COM'=COM]),
write_formatted('%q.\n',['MAN'=MAN]),
write_formatted('%q.\n',['Count'=Count]),
told.
502:デフォルトの名無しさん
10/01/29 15:40:12
>>12
% Prolog
URLリンク(nojiriko.asia)
ゲームとして成立していない。「実例で学ぶゲームAIプログラミング」を
これから買って研究してみます。
503:デフォルトの名無しさん
10/01/29 15:56:43
>>502
ゲームはロジックの間に挿入される副作用に値打ちがあるのだから、
述語構成は
r(Z) :- 停止条件(Z),!.
r(X).
r(X) :- filter(X,Y),r(Y).
のステッパ型パターンが望ましいのかな。実際には、
u(X) :- r(X),_副作用,fail.
といった副作用述語が並ぶことになる。
504:デフォルトの名無しさん
10/01/29 18:04:23
>>495
% Prolog
問題1 :-
文字ならびの取得(Chars),
取得したならびの反転(Chars,Chars2),
第一文字と最終文字を除外(Chars,L2),
第一文字と最終文字を除外したならびの反転(L2,L3),
第一行目の印字(Chars),
第二行目以降の印字(L2,L3),
最終行の印字(Chars2),!.
文字ならびの取得(Chars) :- get_chars(Chars).
取得したならびの反転(Chars,Chars2) :- reverse(Chars,Chars2),!.
第一文字と最終文字を除外(Chars,L2) :- append([_],L2,[_],Chars),!.
第一文字と最終文字を除外したならびの反転(L2,L3) :- reverse(L2,L3),!.
第一行目の表示(L) :- ならびの文字表示(L),nl,!.
第二行目以降の表示(L2,L3) :- 転置([L1,L3],L4),ならびの行表示(L4),!.
最終行の印字(L3) :- ならびの文字表示(L),nl,!.
ならびの行表示([]) :- write('\n'),!.
ならびの行表示([A|R]) :- write_formatted('%t\n',[A]),ならびの行表示(R).
505:デフォルトの名無しさん
10/01/29 18:06:47
>>504 (>>495) 書き直し
% Prolog インデントしてないところがあって読みにくいから書き直し。
問題1 :-
文字ならびの取得(Chars),
取得したならびの反転(Chars,Chars2),
第一文字と最終文字を除外(Chars,L2),
第一文字と最終文字を除外したならびの反転(L2,L3),
第一行目の印字(Chars),
第二行目以降の印字(L2,L3),
最終行の印字(Chars2),!.
文字ならびの取得(Chars) :- get_chars(Chars).
取得したならびの反転(Chars,Chars2) :- reverse(Chars,Chars2),!.
第一文字と最終文字を除外(Chars,L2) :- append([_],L2,[_],Chars),!.
第一文字と最終文字を除外したならびの反転(L2,L3) :- reverse(L2,L3),!.
第一行目の表示(L) :- ならびの文字表示(L),nl,!.
第二行目以降の表示(L2,L3) :- 転置([L1,L3],L4),ならびの行表示(L4),!.
最終行の印字(L3) :- ならびの文字表示(L),nl,!.
ならびの行表示([]) :- write('\n'),!.
ならびの行表示([A|R]) :- write_formatted('%t\n',[A]),ならびの行表示(R).
506:デフォルトの名無しさん
10/01/29 18:14:50
>>505 (>>495) もう一度すみません。
% Prolog
問題1 :-
文字ならびの取得(Chars),
取得したならびの反転(Chars,Chars2),
第一文字と最終文字を除外(Chars,L2),
第一文字と最終文字を除外したならびの反転(L2,L3),
第一行目の表示(Chars),
第二行目以降の表示(L2,L3),
最終行の表示(Chars2),!.
文字ならびの取得(Chars) :- get_chars(Chars).
取得したならびの反転(Chars,Chars2) :- reverse(Chars,Chars2),!.
第一文字と最終文字を除外(Chars,L2) :- append([_],L2,[_],Chars),!.
第一文字と最終文字を除外したならびの反転(L2,L3) :- reverse(L2,L3),!.
第一行目の表示(L) :- ならびの文字表示(L),nl,!.
第二行目以降の表示(L2,L3) :- 転置([L1,L3],L4),ならびの行表示(L4),!.
最終行の表示(L3) :- ならびの文字表示(L),nl,!.
ならびの行表示([]) :- write('\n'),!.
ならびの行表示([A|R]) :- write_formatted('%t\n',[A]),ならびの行表示(R).
507:デフォルトの名無しさん
10/01/29 18:42:01
>>496
% Prolog
ファイル入力した漢字データ(全角)を読み込み、行数を数えながら逆から表示する(_ファイル名) :-
ファイル入力した漢字データ(全角)を読み込み(_ファイル名,Lines),
行数を数えながら逆から表示する(Lines),!.
ファイル入力した漢字データ(全角)を読み込み(_ファイル名,Lines) :-
get_lines(_ファイル名,Lines).
行数を数えながら逆から表示する(Lines) :-
行数を数えながら逆から表示する(1,Lines).
行数を数えながら逆から表示する(_,[]) :- !.
行数を数えながら逆から表示する(N,[_行|R]) :-
文字列の反転(_行,_反転した行),
write_formatted('%t:%t\n',[N,_反転した行]),
N2 is N + 1,
行数を数えながら逆から表示する(N2,R).
文字列の反転(_文字列,_反転した文字列) :-
atom_chars(_文字列,_文字ならび),
reverse(_文字ならび,_反転した文字ならび),
atom_chars(_反転した文字列,_反転した文字ならび).
508:デフォルトの名無しさん
10/01/29 18:56:47
>>497
% Prolog
'ファイルのデータ(英文)を読み込み、一行毎の文字数(スペースも含む)とワード数を数える'(_ファイル名) :-
'ファイルのデータ(英文)を読み込み'(_ファイル名,Lines),
'一行毎の文字数(スペースも含む)とワード数を数えて表示する'(Lines).
'ファイルのデータ(英文)を読み込み'(_ファイル名,Lines) :- get_lines(_ファイル名,lines).
'一行毎の文字数(スペースも含む)とワード数を数えて表示する'(Lines) :-
'一行毎の文字数(スペースも含む)とワード数を数えて表示する'(1,Lines).
'一行毎の文字数(スペースも含む)とワード数を数えて表示する'(_,[]) :- !.
'一行毎の文字数(スペースも含む)とワード数を数えて表示する'(N,[Line|R]) :-
文字数を数える(Line,_文字数),
ワード数を数える(Line,_ワード数),
write_formatted('=>%t:%t文字、%tワード\n',[N,_文字数,_ワード数]),
N2 is N + 1,
'一行毎の文字数(スペースも含む)とワード数を数えて表示する'(N2,R).
文字数を数える(Line,_文字数) :- sub_atom(Line,0,_文字数,0,Line),!.
ワード数を数える(Line,_ワード数) :-
split(Line,[' ','.'],語彙ならび),
length(語彙ならび,_ワード数),!.
509:デフォルトの名無しさん
10/01/29 19:14:34
>>498
% Prolog
'1月1日が金曜日の平年(たとえば2010年)について、月日の入力データから、曜日を求める' :-
催促付き整数入力('月を入力してください:',_月),
催促付き整数入力('日を入力してください:',_日),
曜日を求める(_月,_日,_曜日),
write_formatted('%t月%t日は%t日です\n',[_月,_日,_曜日]),!.
曜日を求める(_月,_日,_曜日) :- 曜日を求める(1,1,_月,_日,金曜,_曜日).
曜日を求める(_月,_日,_月,_日,_曜日,_曜日) :- !.
曜日を求める(_月1,_日1,_月,_日,_曜日1,_曜日) :-
翌日(_月1,_日1,_翌日の月,_翌日の日),
曜日連鎖(_曜日1,_曜日2),
曜日を求める(_翌日の月,_翌日の日,_月,_日,_曜日2,_曜日).
翌日(2,28,3,1) :- !.
翌日(_月,30,_翌日の月,1) :- member(_月,[4,6,9,11]),_翌日の月 is _月 + 1,!.
翌日(_月,31,_翌日の月,1) :- member(_月,[1,3,5,7,8,10,12]),_翌月の月 is _月 + 1,!.
翌日(_月,_日,_月,_翌日の日) :- _翌日の日 is _日 + 1.
曜日連鎖(月曜,火曜).
曜日連鎖(火曜,水曜).
曜日連鎖(水曜,木曜).
曜日連鎖(木曜,金曜).
曜日連鎖(金曜,土曜).
曜日連鎖(土曜,日曜).
曜日連鎖(日曜,月曜).
510:デフォルトの名無しさん
10/01/29 20:13:17
URLリンク(code.nanigac.com)
# Prologでリスト操作をする関数をいくつか書いているんですが、
# どうもうまく動いてくれません。
# うまく動いてくれないのがいくつかあるのですが、全部あげたら
# 切りがないですし、図々しすぎるので、とりあえず
# test1関数とtest2関数の2つ(2つでも図々しいきがするけれど)の相談に乗ってください。
#
# test1関数
# 2つのリストを受け取って2つを(交互に)合わせたリストを作る
# 例1、test([a,b,c],[1,2,3],X). --> X = [a,1,b,2,c,3]
# 例2、test([a,b,c],X,[a,1,b,2,c,3]). --> X = [1,2,3]
# 例3、test([a,b,c],[1,2,3],[a,1,b,2,c,3]). --> true
# 例4、test([a,b,c],[1,2,3],[a,b,c,1,2,3]). --> false
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4394日前に更新/462 KB
担当:undef