このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 132代目 #42 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # 下記の文字列を2次元配列に入力する。 # LISP # C++ # Ada # 次に配列の2列の文字 # S+a # を表示する。 # % Prolog言語の学習 % ・ findall/3 がバックトラックしてきた時には単にfailになっていることの確認 % ・ sub_atom/5 の使い方 % ・ 関数型とは異なり、sub_atomとwriteを組み合わせることはできないこと c132_42 :- findall(S,(for(1,N,3),行入力(S)),L), member(A,L), sub_atom(A,2,1,_,C), write(C), fail. c132_42 :- nl. 行入力(_行) :- read_line_to_codes(current_input,_コードならび), atom_codes(_行,_コードならび). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % for/3,between/3は引数の順序が替わっただけで、同じ意味の述語だ。 % 実際にはfor/3の方は、N1 > Mの場合の定義が追加されることが多い。 % その場合は、Nからは降順に値を取り出すことができる。 % for(N,N,M) :- N =< M. for(N1,N,M) :- N1 < M, N2 is N1 + 1, for(N2,N,M). between(X,L,U) :- X = L,L =< U. between(X,L,U) :- L < U,L1 is L + 1,between(X,L1,U). % % 上記between/3をLambda記法で表現すると、 % between = lambda X,L,U if X=L and L=