この記事について
- 学校で習った程度なので間違いがあるかもしれません。(あった場合は教えていただけると嬉しいです。)
- 関係名, 変数名の名付けが適当です。
- 文字列の入力が複数の場合はそのうち書きます。
- 出力の部分もそのうち増やします。
入力
1行に1つ
そのまま変数へ
入力例:
1000
実装例:
get_input(Number):-
current_input(Input),
read_string(Input, '\n', '', _, String),
number_string(Number, String). % 文字列型なら必要ない
main:-
get_input(N),
write(N).
% 1000
リスト化
入力例:
1000
実装例:
get_input(Number):-
current_input(Input),
read_string(Input, '\n', '', _, String),
number_string(Number, String). % 文字列型なら必要ない
main:-
get_input(N),
number_chars(N, List), % 文字列型なら string_chars(Str, List)
write(List).
% [1,0,0,0]
1行に複数
別々の変数へ
入力例:
10 20
実装例:
get_input(Number):-
current_input(Input),
% 第二引数を ' \n' (スペースを含める)
read_string(Input, ' \n', '', _, String),
number_string(Number, String). % 文字列型なら必要ない
main:-
get_input(A),
get_input(B),
write(A),
write(' '),
write(B).
% 10 20
複数行(行数指定あり)
1行目に個数 2行目に個数個の入力 -> リスト
入力例:
3
10 20 30
実装例:
get_input(Number):-
current_input(Input),
read_string(Input, ' \n', '', _, String),
number_string(Number, String).
get_numbers(0, []):- !.
get_numbers(N, [Number|L]):-
N1 is N - 1,
get_input(Number),
get_numbers(N1, L).
main:-
get_input(N),
get_numbers(N, List),
write(List).
% [10,20,30]
1行目に個数 2行目以降に個数個行の入力 -> リスト
入力例:
3
10
20
30
実装例:
get_input(Number):-
current_input(Input),
read_string(Input, '\n', '', _, String),
number_string(Number, String).
get_some_inputs(0, []):- !.
get_some_inputs(N, [A|L]):-
get_input(A),
N1 is N - 1,
get_some_inputs(N1, L).
main:-
get_input(N),
get_some_inputs(N, List),
write(List).
% [10,20,30]
1行目で指定 1行に複数が複数行 -> リスト in リスト
入力例:
3 4
11 12 13 14
21 22 23 24
31 32 33 34
実装例:
get_input(Number):-
current_input(Input),
read_string(Input, ' \n', '', _, String),
number_string(Number, String).
get_numbers(0, []):- !.
get_numbers(N, [Number|L]):-
N1 is N - 1,
get_input(Number),
get_numbers(N1, L).
get_lists(0, _, []):- !.
get_lists(H, W, [T|L]):-
get_numbers(W, T),
H1 is H - 1,
get_lists(H1, W, L).
main:-
get_input(H),
get_input(W),
get_lists(H, W, List),
write(List).
% [[11,12,13,14],[21,22,23,24],[31,32,33,34]]
出力
nl. % 改行
write('\n'). % 改行
write('Yes'). % Yes
write(Count). % Countの内容
参考
とても参考にさせていただきました。素晴らしい記事ありがとうございます。
AtCoder に登録したら解くべき精選過去問 10 問を Prolog で解いてみた (@n4o847さん)
[AtCoder に登録したら解くべき精選過去問 10 問を Prolog で提出してみた] (https://qiita.com/Mopepe51/items/4a1c5351c001ad21218e) (@Mopepe51さん)