このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 130代目 #444 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク):比較:文字列2つ入力後、先頭から5文字を #   比較した結果を表示しなさい % 課題とは離れて述語を定義することにしました。 文字列比較(_文字列_1,_文字列_2,_診断ならび) :- findall([_診断項目,_診断結果],文字列比較診断(_診断項目,_文字列_1,_文字列_2,_診断結果),_診断ならび). 先頭からN文字の文字列比較診断(_文字列_1,_文字列_2,N,_診断ならび) :- sub_atom(_文字列_1,0,N,_,_文字列_1_1), sub_atom(_文字列_2,0,N,_,_文字列_2_1), findall([_診断項目,_診断結果],文字列比較診断(_診断項目,_文字列_1_1,_文字列_2_1,_診断結果),_診断ならび). 文字列比較診断(文字列長比較,_文字列_1,_文字列_2,_診断) :- 文字列長比較診断(_文字列_1,_文字列_2,_診断). 文字列比較診断(文字列長差,_文字列_1,_文字列_2,_文字列長差) :- 文字列長差比較診断(_文字列_1,_文字列_2,_文字列長差). 文字列比較診断(一致,_文字列_1,_文字列_2,一致) :- _文字列_1 = _文字列_2. 文字列比較診断(一致,_文字列_1,_文字列_2,不一致) :- _文字列_1 \= _文字列_2. 文字列比較診断(大小比較,_文字列_1,_文字列_2,Op) :- compare(Op,_文字列_1,_文字列_2). 文字列比較診断(共通文字,_文字列_1,_文字列_2,_共通文字ならび) :- 文字列共通文字(_文字列_1,_文字列_2,_共通文字ならび). 文字列比較診断(先頭からの共通文字列,_文字列_1,_文字列_2,_先頭からの共通文字列) :- 先頭からの共通最長文字列(_文字列_1,_文字列_2,_,_先頭からの共通文字列). 文字列比較診断(先頭からの共通文字列長さ,_文字列_1,_文字列_2,_先頭からの共通文字列長) :- 先頭からの共通文字列長(_文字列_1,_文字列_2,_先頭からの共通文字列長,_). 文字列長比較診断(_文字列_1,_文字列_2,_演算子) :- ふたつの文字列長(_文字列_1,_文字列_2,_文字列長_1,_文字列長_2), compare(_演算子,_文字列長_1,_文字列長_2). ふたつの文字列長(_文字列_1,_文字列_2,_文字列長_1,_文字列長_2) :- atom_length(_文字列_1,_文字列長_1), atom_length(_文字列_2,_文字列長_2). 文字列長差比較診断(_文字列_1,_文字列_2,_文字列長差) :- ふたつの文字列長(_文字列_1,_文字列_2,_文字列長_1,_文字列長_2), _差 is _文字列長_1 - _文字列長_2. 文字列共通文字(_文字列_1,_文字列_2,_共通文字ならび) :- ふたつの文字列をそれぞれ文字ならびに変換する(_文字列_1,_文字列_2,_文字ならび_1,_文字ならび_2), 積集合(_文字列ならび_1,_文字ならび_2,_共通文字ならび). ふたつの文字列をそれぞれ文字ならびに変換する(_文字列_1,_文字列_2,_文字ならび_1,_文字ならび_2) :- atom_chars(_文字列_1,_文字ならび_1), atom_chars(_文字列_2,_文字ならび_2). 先頭からの共通最長文字列(_文字列_1,_文字列_2,_先頭からの共通文字列長,_先頭からの共通文字列) :- findall([_先頭からの変位,_先頭からの共通文字列],( 先頭からの共通文字列(_文字列_1,_文字列_2,_先頭からの変位,_先頭からの共通文字列)),LL), max(LL,[_先頭からも共通文字列長,_先頭からの共通文字列]). 先頭からの共通文字列(_文字列_1,_文字列_2,_先頭からの変位,_先頭からの共通文字列) :- sub_atom(_文字列_1,0,_先頭からの変位,_,_先頭からの共通文字列), sub_atom(_文字列_2,0,_先頭からの変位,_,_先頭からの共通文字列). 先頭からの共通文字列長(_文字列_1,_文字列_2,_先頭からの共通文字列長) :- 先頭からの共通最長文字列(_文字列_1,_文字列_2,_先頭からの共通文字列長,_). strncmp(_文字列_1,_文字列_2,N,Op) :- sub_atom(_文字列_1,0,N,_,_文字列_1_1), sub_atom(_文字列_2,0,N,_,_文字列_2_1), compare(Op,_文字列_1_1,_文字列_2_1). 積集合(L1,L2,_積集合) :- setof(_要素,[L1,L2,_要素] ^ ( member(_要素,L1), member(_要素,L2)),_積集合). max(L,A) :- select(A,L,R), forall(member(B,R),B @=< A).