このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1200175247/550
# [1] 授業単元: Ruby演習 [2] 問題文、http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9426.txt
# Rubyの問題がわかりません 助けてください
#
# (1)曜日を表す英語と日本語との対応を表すハッシュwdayを定義しなさい
#
# p wday["sunday"] #=> "日曜日"
# p wday["monday"] #=> "月曜日"
# p wday["saturday"] #=> "土曜日"
#
# (2)ハッシュのメソッドを使って(1)のハッシュwdayのペアの数を数えなさい
#
# (3)eachメソッドと(1)のハッシュwdayを使って以下の文字列を出力させてくださ
い。
# 「sunday」は日曜日のことです。
# 「monday」は月曜日のことです。
#
# (4)ハッシュには配列の%wのようなものがありません。そこで、空白とタブと改行(正
規表現で定義するなら「/\uff3cs+/」)で区切られた文字列をハッシュに変換するメソ
ッドstr2hashを定義してください。
#
# p str2hash("bule 青 white 白\uff3cnred赤");
# #=> {"bule"=>"青", "white"=>"白", "red"=>"赤"} 

:- op(450,xfx,(=>)).

% (1)

wday({ "sunday" => "日曜日","monday" => "月曜日","saturday" #=> "土曜日"}).

% (2)
hash_count(Hashname,Count) :-
    functor(P,Hashname,1),
    call(P),
    arg(1,P,H),
    count(H,Count).

count(','(A,B),Count) :-
    count(B,Count2),
    Count is Count2 + 1.
count(A,1).

% (3)
?- each(wday.A=>B),write_formatted('「%t」は%tのことです。\n',[A,B]),fail;true.

each(Hashname.Key=>Value) :-
    functor(P,Hashname,1),
    arg(1,P,V),
    each(V,Key=>Value).

each(','(Key=>Value,B),Key=>Value).
each(','(_,B),Key=>Value) :-
    each(B,Key=>Value).
each(Key=>Value,Key=>Value).

% (4)

str2hash(Atom,Hash) :-
    split(Atom,[' ','\t','\n'],L),
    findall(U,n個組(2,L,U),L2),
    hashを成長させる(L2,Hash).

hashを成長させる([A,B],{ A=>B }) :- !.
hashを成長させる([[A,B]|R], { (A=>B,R2) }) :-
    hashを成長させる(R,{ R2 }).

n個組(N,L,X) :-
    length(X,N),
    append(X,L2,L3),
    append(L1,L3,L),
    length(L1,Len),
    0 is Len mod N.