このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1276873238/830
#  誰か助けて 
#   
#  問題1 
#   はじめに変数に適当な数の文字列による配列をあらかじめ設定しておき、入力された数字を受け取ったら、そのスロットの文字列を表示するプログラムをex08-02.rbで保存して実行してください. 
#    
#  問題2 
#   問題1のプログラムは、nilのスロットが指定されると、そのままnilを返します.このときには「そのスロットには文字列はありません.」と表示されるように、書き換えて、ex08-03.rbで保存して実行してください. 
#    
#  問題3 
#   はじめに文字列の値を設定した配列変数の各スロットについて、その文字列の文字数を表示するプログラムをex08-04.rbで保存して実行してください.たとえばstrings=[’dog’,’cat’,’mouse’]の場合、以下のように出力させます. 
#   dogは3文字 
#   catは3文字 
#   mouseは5文字 
#    
#  問題4 
#   はじめに文字列の値を設定した配列変数の各スロットの内容を3回ずつ表示するプログラムをex08-05.rbで保存して実行してください. 
# 
#  問題5 
#   以下のように入力したいだけの文字列を入力するよう求めて、Enterが押されたらそれを入力した順につなげて1行に出力するプログラムをex08-07.rbで保存して実行してください. 
#   文字列を入力してください 
#   dog[Enter] 
#   文字列を入力してください 
#   cat[Enter] 
#   文字列を入力してください 
#   elephant[Enter] 
#   文字列を入力してください 
#   [Enter] 
#   あなたの入力した文字列は 
#   dog,cat,elephant 
#   です. 
#    
#  問題6 
#   問題5のプログラムを、文字列を入力とは逆順に出力するように書き換えたプログラムをex08-08.rbで保存して実行してください. 
#    
#  問題7 
#   問題5のプログラムを、3文字の文字列のみを出力するように書き換えたプログラムをex08-09.rbで保存して実行してください. 
# 
# 

'問題1: はじめに変数に適当な数の文字列による配列をあらかじめ設定しておき、入力された数字を受け取ったら、そのスロットの文字列を表示する' :-
        入力された数字(_入力された数字),
        文字列ならび(_文字列ならび),
        nth1(_入力された数字,_文字列ならび,_文字列),
        writef('%t\n',[_文字列]).

入力された数字(_入力された数字) :-
        数を得る(数字,_入力された数字).


'問題2: はじめに変数に適当な数の文字列による配列をあらかじめ設定しておき、入力された数字を受け取ったら、そのスロットの文字列を表示する。ただし、nil(空文字)を受け取ったら、「そのスロットには文字列はありません.」と表示する' :-
        入力された数字(_入力された数字),
        文字列ならび(_文字列ならび),
        nth1(_入力された数字,_文字列ならび,_文字列),
        'そのスロットの文字列を表示する。ただし、nil(空文字)を受け取ったら、「そのスロットには文字列はありません.」と表示する'(_文字列).

'そのスロットの文字列を表示する。ただし、nil(空文字)を受け取ったら、「そのスロットには文字列はありません.」と表示する'('') :-
        writef('%t\n',['そのスロットには文字列はありません.']).
'そのスロットの文字列を表示する。ただし、nil(空文字)を受け取ったら、「そのスロットには文字列はありません.」と表示する'(_文字列) :-
        \+(_文字列=''),
        writef('%t\n',[_文字列]).


'問題3: はじめに文字列の値を設定した配列変数の各スロットについて、その文字列の文字数を表示する' :-
        文字列ならび(_文字列ならび),
        append(_,[_文字列|R],_文字列ならび),
        atom_length(_文字列,_文字数),
        writef('%tの文字数は%t\n',[_文字列,_文字数]),
        R = [].


'問題4: はじめに文字列の値を設定した配列変数の各スロットの内容を3回ずつ表示する' :-
        文字列ならび(_文字列ならび),
        append(_,[_文字列|R],_文字列ならび),
        writef('%t\n%t\n%t\n',[_文字列,_文字列,_文字列]),
        R = [].

        
'問題5: 入力したいだけの文字列を入力するよう求めて、Enterが押されたらそれを入力した順につなげて1行に出力する' :-
        文字列を入力する(_文字列_1),
        'Enterが押されれるまで入力したいだけの文字列を入力するよう求めて'(_文字列_1,_文字列ならび),
        それを入力した順につなげて1行に出力する(_文字列ならび).

文字列を入力する(_文字列) :-
        writef('%t ',[文字列を入力してください]),
        get_line(_文字列).

'Enterが押されれるまで入力したいだけの文字列を入力するよう求めて'('',[]) :- !.
'Enterが押されれるまで入力したいだけの文字列を入力するよう求めて'(_文字列,[_文字列|R]) :-
        文字列を入力する(_文字列_2),
        'Enterが押されれるまで入力したいだけの文字列を入力するよう求めて'(_文字列_2,R).

それを入力した順につなげて1行に出力する(_行ならび) :-
        atomic_list_concat(_行ならび,_表示文字列),
        writef('%t\n',[_表示文字列]).


'問題6: 問題5のプログラムを、文字列を入力とは逆順に出力する' :-
        文字列を入力する(_文字列_1),
        'Enterが押されれるまで入力したいだけの文字列を入力するよう求めて'(_文字列_1,_文字列ならび),
        reverse(_文字列ならび,_反転した文字列ならび),
        各文字列を反転して表示する(_反転した文字列ならび).

各文字列を反転して表示する(_反転した文字列ならび) :-
        append(_,[_文字列|R],_反転した文字列ならび),
        文字列を反転する(_文字列,_反転した文字列),
        writef('%t\n',[_反転した文字列]),
        R = [].

文字列を反転する(_文字列,_反転した文字列) :-
        atom_chars(_文字列,Chars),
        reverse(Chars,Chars_2),
        atom_chars(_反転した文字列,Chars_2).


'問題7: 問題5のプログラムを、3文字の文字列のみを出力する' :-
        文字列を入力する(_文字列_1),
        'Enterが押されれるまで入力したいだけの文字列を入力するよう求めて'(_文字列_1,_文字列ならび),
        '入力された文字列のうち3文字の文字列のみを出力する'(_文字列ならび).

'入力された文字列のうち3文字の文字列のみを出力する'([]).
'入力された文字列のうち3文字の文字列のみを出力する'([_文字列|R]) :-
        '3文字の文字列のみを出力する'(_文字列),
        '入力された文字列のうち3文字の文字列のみを出力する'(R).

'3文字の文字列のみを出力する'(_文字列) :-
        atom_length(_文字列,3),
        writef('%t\n',[_文字列]),!.
'3文字の文字列のみを出力する'(_).