いろんな言語で宿題ス ..
[2ch|▼Menu]
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


511:デフォルトの名無しさん
10/01/29 20:14:34
>>510
% Prolog

test1([],[],[]).
test1([A|R1],[B|R2],[A,B|R3]) :- test1(R1,R2,R3).

512:デフォルトの名無しさん
10/01/29 20:28:58
URLリンク(ime.nu)
# test2関数
# 2つのリストを受け取り、まず一つ目のリストからダブリを取り除く。
# そして、それが二つ目のリストと(順番も含めて)同じかチェックする。
# 例1、test2([a,b,c,c,b,a],[a,b,c]). --> true
# 例2、test2([a,b,c,b,c,],[c,b,a]). --> false (順番が違うので)
# 例3、test2([a,a,b,b,c,c],X). --> X = [a,b,c]


513:デフォルトの名無しさん
10/01/29 20:34:53
>>512
% Prolog

test2([],[]).
test2([A|R1],[A|R2]) :-
  ならびの削除(A,R1,R3),
  test2(R3,R2).

ならびから削除(_,[],[]).
ならびから削除(A,[A|R1],R2) :- ならびから削除(A,R1,R2).
ならびから削除(A,[B|R1],[B|R2]) :- \+(A=B),ならびから削除(A,R1,R2).

514:デフォルトの名無しさん
10/01/29 21:03:05
スレリンク(tech板:336番)
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): URLリンク(ime.nu)
#
# ★課題2★
# キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を
# 受け取って(最後は改行)、二次方程式 ax2+bx+c=0 の解を画面に(標準出力に)出力せよ。
# 二次方程式の解は複素数の範囲で考えること。二次方程式を解く部分はmain関数とは
# 別にしてmain関数から呼ぶこと。グローバル変数の使用は禁止。


515:デフォルトの名無しさん
10/01/29 21:07:29
スレリンク(tech板:336番)
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): URLリンク(ime.nu)
#
# ★課題1★
# キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、
# その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば
# 画面に(標準入力に)YES、そうでなければ、NOと出力せよ。与えられた条件を
# 判定する部分はmain関数とは別の関数にしてmain関数から呼ぶこと。
# グローバル変数の使用は禁止。


516:デフォルトの名無しさん
10/01/29 21:10:17
スレリンク(tech板:336番)
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): URLリンク(ime.nu)
#
# ★課題3★
# キーボードから(標準入力から)スペースで区切られて最後が改行の3つの実数を
# 3回を受け取って、それらの合計9この実数からなる3行3列の行列の逆行列を
# 求めて画面に(標準出力)出力せよ。
# 逆行列を求める部分はmain関数とは別の関数にしてmain関数から呼ぶこと。
# グローバル変数の使用は禁止。


517:デフォルトの名無しさん
10/01/29 21:18:16
スレリンク(tech板:336番)
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): URLリンク(ime.nu)
#
# ★課題4★
# 複素数の行列を扱うことを考える。実部と虚部をdouble型のメンバーとしてもつ
# 構造体struct complex型の二次元配列を使って、2行2列の成分からなる複素数の
# 行列を扱う。Struct complex型の変数の足し算やかけ算、および上述のような
# 2行2列の複素行列の足し算やかけ算を行う関数を準備し、それらの関数を
# 利用して、2行2列の複素数の行列のexpを、Maclaurin展開の10項目までを
# 計算することによって求めなさい。グローバル変数の使用は禁止。
# 実行時に入力する行列の内容については、実数だけからなる対角行列、
# 純虚数の対角行列、一般の複素数の対角行列、その他の一般の行列などの
# 多くの場合についてテストすること。


518:デフォルトの名無しさん
10/01/29 21:22:17
スレリンク(tech板:336番)
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): URLリンク(ime.nu)
#
# ★課題5★
# 1行にスペースで区切られた2つの実数が書かれているデータファイルをエディタで
# 作成して適当な名前で保存しておけ。標準入力からのリダイレクトを使って
# そのファイルからデータを読み込み、データのグラフを画面に(標準入力に)出力せよ

# ここで、各行の左側のデータをxデータ、右側のデータをyデータとする。
# また、グラフはテキスト画面にマイナス(‐)やプラス(+)や縦棒(|)や
# アスタリスク(*)などの文字を出力することによって実現せよ。さらに、
# yデータの平均と標準偏差も求めて画面に(標準出力に)出力せよ。様々なデータ数や
# データ範囲をもつ入力データを与えられても適切に動くようにつくることが
# 望ましいが、難しければ入力データ範囲は0以上10以下に限定するなど、
# 自分でプログラムの仕様を簡素化してもよい。


519:デフォルトの名無しさん
10/01/29 21:28:15
スレリンク(db板:474番)
# SQL Server Compact 3.5 で、a_tbl と b_tbl のコードが一致した場合に
# a_tbl に、b_tblの名前をセットするみたいなことしたいのですが無理ですか?
#
# UPDATE a_tbl
# SET name = b_tbl.name
# FROM b_tbl
# WHERE a_tbl.no = b_tbl.no
#
# 実行すると、「FROM 句はこのクエリの種類では使用できません」ってエラーになります。
# SQL Server 2008 だと問題ないのですが・・・

520:デフォルトの名無しさん
10/01/29 22:06:58
>>519
% Prolog

'a_tbl と b_tbl のコードが一致した場合に a_tbl に、b_tblの名前をセットする' :-
  a_tbl(_no,_name1),
  b_tbl(_no,_name2),
  update_a_tbl(_no,_name2),
  fail.
'a_tbl と b_tbl のコードが一致した場合に a_tbl に、b_tblの名前をセットする'.

update_a_tbl(_no,_name2) :-
  retract(a_tbl(_no,_)),
  assertz(a_tbl(_no,_name2)),
  fail.
update_a_tbl(_,_).


521:デフォルトの名無しさん
10/01/29 22:25:00
>>515
% Prolog
'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば画面に(標準入力に)YES、そうでなければ、NOと出力せよ' :-
'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数),
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_正の整数,_診断),
write_formatted('%t\n',[_診断]),!.

'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数):-
  repeat,
  get_integer(_正の整数),
  integer(_正の整数),
  _正の整数 >= 0,!.

その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_数,'YES') :-
  0 is _数 mod 3,!.
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_数,'YES') :-
  各桁の数字のいづれか(_数,L),
  member(3,L),!.
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_,'NO').

各桁の数字のいづれか(N,[N]) :- N < 10,!.
各桁の数字のいづれか(N,[M|R]) :-
  M is N mod 10,
  M2 is N // 10,
  各桁の数字のいづれか(M2,R).

522:デフォルトの名無しさん
10/01/29 22:28:41
>>521 (>>515) 一部表示し直し
% Prolog

'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば画面に(標準入力に)YES、そうでなければ、NOと出力せよ' :-
  'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数),
  その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_正の整数,_診断),
  write_formatted('%t\n',[_診断]),!.

523:デフォルトの名無しさん
10/01/30 05:59:00
>>484
% Prolog (その一)

インデント深度とは(_行,_インデント深度) :-
  '行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n),
  _n = _インデント深度,!.

'行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n) :-
  sub_atom(_行,_n,1,_,C),
  \+(C=' '),
  \+(C='\t'),!.

524:デフォルトの名無しさん
10/01/30 06:13:04
>>523 (>>484)
% Prolog (その一) 「インデント深度とは」の「とは」は説明的ではあるが実用上好ましいとはいえない。
% 備考的な部分の定義ではしばしば迷うところ。普通は以下だが、

インデント深度(_行,_インデント深度) :-
  '行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n),
  _n = _インデント深度,!.

% 辞書引きの際は実務的な定義を参照する感じの定義。

インデント深度とは(_行,_インデント深度) :- インデント深度(_行,_インデント深度).

% ひっくり返して、実用時に辞書を引く感じ。

インデント深度(_行,_インデント深度) :- インデント深度とは(_行,_インデント深度).


525:デフォルトの名無しさん
10/01/30 06:26:39
>>523 (>>484)
% Prolog 出題が不完全でtab処理ができていない。普通は、

tab(空白,6).

'行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n) :-
  atom_chars(_行,Chars),
  行頭からタブ、空白以外の文字が現れるまでの文字数(0,Chars,_n).

行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[],_n) :- !.
行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[A|_],_n) :- \+(A='\t'),\+(A=' '),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,['\t'|R],_n) :-
  tab(空白,M),
N2 is N + M,
行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,[' '|R],_n) :-
N2 is N + 1,
行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.



526:デフォルトの名無しさん
10/01/30 06:28:44
>>525 (>>484) 書き直し。すみません。
% Prolog 出題が不完全でtab処理ができていない。普通は、

tab(空白,6).

'行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n) :-
  atom_chars(_行,Chars),
  行頭からタブ、空白以外の文字が現れるまでの文字数(0,Chars,_n).

行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[],_n) :- !.
行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[A|_],_n) :- \+(A='\t'),\+(A=' '),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,['\t'|R],_n) :-
  tab(空白,M),
  N2 is N + M,
  行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,[' '|R],_n) :-
  N2 is N + 1,
  行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4394日前に更新/462 KB
担当:undef