• 締切済み

prologについて

emacsというソフトでprologについて勉強しているんですが、 times,plus,exp,mod を定義してから動作の確認をしたいのです。 (<- - (times 0 ?x 0)) (<- (times (s ?x) ?y ?z) (times ?x ?y ?xy) (plus ?xy ?y ?z)) (<- - (exp (s ?n) 0 0)) (<- (exp 0 (s ?x) (s 0))) (<- (exp (s ?n) ?x ?y) (exp ?n ?x ?z) (times ?z ?x ?y)) (<- - (mod ?x ?y ?x) (< ?x ?y)) (<- (mod ?x ?y ?z) (plus ?x1 ?y ?x) (mod ?x1 ?y ?z)) と定義したのですが、確認をするときにどのように確認したらよいのか教えて頂けますでしょうか?

みんなの回答

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.2

質問への回答でなくてすみませんが…. > みたことない記法だ。 20年ほど前,電総研 (当時) の中島秀之氏 (現:公立はこだて未来大学学長) が開発された Prolog/KR もS式を採用していました. ↓こんな感じ. http://ken-s.tea-nifty.com/hal/2005/08/prolog_c81e.html

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

何これ? prologですか? みたことない記法だ。emacs専用のprolog言語みたいのがあるんでしょうか。

関連するQ&A

  • prolog言語で積分計算

    PROLOG計算 prolog言語で積分計算のできるプログラムを作っています。 積分定数Cを表示させるようにしているのですが 、3*x^3の積分の結果が 3* (x^2/2+c)+cとなってしまいます。 ()内のcを消すにはどーしたらよいでしょうか? プログラムは以下のように書きました。 t(x,x^2/2+c). t(Y ,Y*x+c) :- integer(Y). t(Y+Z,TY+TZ+c):- t(Y,TY),t(Z,TZ). t(Z*Y,Z*TY+c) :- integer(Z),t(Y,TY). t(Y^N ,(1/N)*Y^N1*TY+c):-integer(N),N1 is N+1,t(Y,TY). t(Y-Z,TY-TZ+c):-t(Y,TY),t(Z,TZ).

  • prologの記号について

    prologを勉強中です.次のように階乗を計算します fact(N, 1) :- N < 1!. fact(N, X) :- N1 is N - 1, fact(N1, Y), X is N * Y. そのとき,1行目の最後の"!"は何を表すのでしょうか? たぶん,それ以上先を実行しないという意味だと思うのですが, 正しい意味が分かりません.ご指導お願いします.

  • Prologの単一化について

    (1)p([X|Y]) と p([a]) (2)p(a, [b, c], X)  と p(Y1, [Y2|Y3], Y3) (3)?-p([a, b, c], X). p([X|Y], N) :- p(Y, N1), N is N1+1 . (4)?-p([a, b, c], [d, e], X) . p([X|A], B, [X|C]) :- p(A, B, C). (5)?-p([a, b, c], [], X). p([X|R], Y, Z) :- p(R, [X|Y], Z) の述語についてですが、それぞれ単一化すると各変数はどうなるでしょうか。 (3)~(5)については、質問と規則の頭部との単一化です。 どの変数も単一化の前に値を持っていないとします。 教えてください。

  • 至急お願いします。代数学の問題です。

    (1)(1+240Σ_(n=1,∞)σ3(n)・q^n)^3 - (1-504Σ_(n=1,∞) σ5(n)・q^n)^2 =(1+240X)^3 - (1-504Y)^2 ≡2^4・3^2・(5X+7Y) (mod12^3) これより、5・σ3(n)+7・σ5(n)≡0 (mod4) と≡0 (mod3) を証明せよ。 定義 Γ ⊂ SL2(R) が合同部分群 ⇔ ∃n ∈ N s.t. Γ(n) ⊆ Γ ⊆ SL2(Z) SL2(Z)=Γ(1) (level1) (2)SL2(Z) / Γ(n) = SL2(Z/NZ) を証明せよ。 (3)(2)の位数が(N^3)・Π_(P|n) (1-1/(P^2))となることを証明せよ。 よろしくお願い致します。

  • Prologについて教えてください

    A,B,Cを使って直角三角形が成り立ち真となる関係right triangleを定義するプログラムを教えてください。今のところ triangle(A,B,C). vertical(seg(point(X,Y),point(X,Y1)). horizontal(seg(point(X,Y),point(X1,Y)). を使うところまではわかっているのですが先に進みません。

  • prologについての質問です。

    課題で、リストXのなかにある要素 Yの個数を数える述語  allcount(X,Y,N)を定義しなさい。 というものが出ましたが、参考になるような本も、webページも見つけられませんでした。 どういったように定義すればよいでしょうか? ?- allcount([1,2,[1,2],1], 1, N). の答えが N=3 となればよいらしいです。

  • たびたび すみません

    たびたび すみません 二変数のX1,X2が独立でそれぞれ正規分布N(0,1)に従う   Y1=exp^-(X1^2+X2^2)/2 Y2=1/2pai arctan (X2/X1) Y1とY2がそれぞれ一様分布(0,1)に従うことを示せ Y1 Y2の最大値Z=max{Y1,Y2}の平均と分散を求めよ

  • 数学(ベクトル)の問題

    http://okwave.jp/qa/q8022847.html のNO.7の回答より、 さらに途中式を書いたのですが、 L^2 = m(t-n(s))^2-(a1^2+b1^2+c1^2 ) {(c1(z2-z1)+b1(y2-y1)+a1(x2-x1)+(a1a2+b1b2+c1c2)s)/(a1^2+b1^2+c1^2 )}^2+(a2^2+b2^2+c2^2 ){(s^2 )+2s{c2(z2-z1)+b2(y2-y1)+a2(x2-x1)}/{(a2^2+b2^2+c2^2 )} }+{(x2-x1)^2 }+{(y2-y1)^2 }+{(z2-z1)^2 } n(s)={c1(z2-z1)+b1(y2-y1)+a1(x2-x1)+(a1a2+b1b2+c1c2)s}/(a1^2+b1^2+c1^2 ) = m(t-n(s))^2-{c1(z2-z1)+b1(y2-y1)+a1(x2-x1)+(a1a2+b1b2+c1c2)s}^2/(a1^2+b1^2+c1^2 )+(a2^2+b2^2+c2^2 ){(s^2 )+2s{c2(z2-z1)+b2(y2-y1)+a2(x2-x1)}/{(a2^2+b2^2+c2^2 )} }+{(x2-x1)^2 }+{(y2-y1)^2 }+{(z2-z1)^2 } = m(t-n(s))^2-{c1(z2-z1)+b1(y2-y1)+a1(x2-x1)+(a1a2+b1b2+c1c2)s}^2/(a1^2+b1^2+c1^2 )+(a2^2+b2^2+c2^2 )(s^2 )+2s{c2(z2-z1)+b2(y2-y1)+a2(x2-x1)}+{(x2-x1)^2 }+{(y2-y1)^2 }+{(z2-z1)^2 } ところで {c1(z2-z1)+b1(y2-y1)+a1(x2-x1)+(a1a2+b1b2+c1c2)s}^2 = {c1(z2-z1)+b1(y2-y1)+a1(x2-x1)}^2 +2{c1(z2-z1)+b1(y2-y1)+a1(x2-x1)}(a1a2+b1b2+c1c2)s +{(a1a2+b1b2+c1c2)s}^2 = {c1(z2-z1)+b1(y2-y1)+a1(x2-x1)}^2 +2{c1(z2-z1)+b1(y2-y1)+a1(x2-x1)}(a1a2+b1b2+c1c2)s +(a1a2+b1b2+c1c2)^2 (*s)^2 これより、 L^2= m(t-n(s))^2+s^2 {(a2^2+b2^2+c2^2 )-(a1a2+b1b2+c1c2)^2/(a1^2+b1^2+c1^2 )} +s[2{(c2(z2-z1)+b2(y2-y1)+a2(x2-x1))-{c1(z2-z1)+b1(y2-y1)+a1(x2-x1)}(a1a2+b1b2+c1c2)s/(a1^2+b1^2+c1^2 )}] +{(x2-x1)^2 }+{(y2-y1)^2 }+{(z2-z1)^2 }-{c1(z2-z1)+b1(y2-y1)+a1(x2-x1)}^2/(a1^2+b1^2+c1^2 ) 簡単、 L^2 =m(t-n(s))^2+ps^2+p1s+p2 =m(t-n(s))^2+p(s^2+p1s/p)+p2 =m(t-n(s))^2+p(s^2+p1s/p+(p1/p)^2-(p1/p)^2 )+p2 =m(t-n(s))^2+p(s^2+p1s/p+(p1/p)^2 )-(p1)^2/p+p2 まで、計算したのですが(間違っていたら申し訳ありません)、 ここから、どのように q=-p1/2p が導出できるのかがわからないです。 (rは導出できました。) 数式だらけで分かりづらいと思いますが、計算ミスを指摘しつつ、導出過程も分かりやすくお願いします。

  • C++のプログラミングについての質問です。

    C++のプログラミングについての質問です。 f(x)=\int_{1}^{0} \frac{1+e^t}{\sin(xt)}dt -0.1=0 (式を皆さんに分かってもらえるように表記する方法が分からないため、TeX表記します。) このようになるようなx2の値を求めるプログラムを教えてください。 ちなみに、定積分は積分区間は100等分して、シンプソン法と狙い撃ち法を用いて プログラムを作ってください。 P.S 狙い撃ち法は簡単に言うと x2=\frac{f(x0)-f(x1)}{x1*f(x0) - x0*f(x1)} この式を使って後はシンプソン法で求めた値を上式に突っ込むだけです。 一応自分が考えたプログラムを載せます。 間違いがあればご指摘お願いします。 ↓ // kadai5.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <math.h> int _tmain(int argc, _TCHAR* argv[]) { int t; double ta,x0=100,x1=x0-0.01,x2,S0=0,S1=0,Ds0,Ds1,fx0,fx1,y00,y01,y02,y10,y11,y12,esp=0.000001; for(;;){ for(t=0;t<=99;t=t+2){ ta=t*0.01; y00=sin(x0*ta)/(1+exp(ta)); y01=sin((x0+1)*(ta))/(1+exp(ta)); y02=sin((x0+2)*(ta))/(1+exp(ta)); Ds0=0.01*(y00+4*y01+y02)/3; S0=S0+Ds0; y10=sin(x1*ta)/(1+exp(ta)); y11=sin((x1+1)*(ta))/(1+exp(ta)); y12=sin((x1+2)*(ta))/(1+exp(ta)); Ds1=0.01*(y10+4*y11+y12)/3; S1=S1+Ds1; printf("S0=%lf \n S1=%lf",S0,S1); } fx0=S0-0.01; fx1=S1-0.01; x2=((x1*fx0)-(x0*fx1))/(fx0-fx1); printf("x=%lf \n",x2); if(fabs(x1-x2) <= esp)break; x0=x1; x1=x2; } return 0; }

  • cosh(x)の逆関数について

    cosh(x)の逆関数について質問です。 証明において y=cosh(x)とおくと exp(x)=y±√(y^2-1) となり exp(x1)=y+√(y^2-1),exp(x2)=y-√(y^2-1) とおくと exp(x1)・exp(x2)=1,exp(x1)≧exp(x2) なので,0<exp(x2)≦1≦exp(x1) ∴ log(exp(x2))≦0≦log(exp(x2)) となりますが exp(x1)・exp(x2)=1,exp(x1)≧exp(x2) なので,0<exp(x2)≦1≦exp(x1) となる理由がわかりません。 なぜ、exp(x1)・exp(x2)=1であるとexp(x2)≦1≦exp(x1)と言えるのですか? 誰か教えて頂けると幸いです。 よろしくお願いします。

専門家に質問してみよう