- ベストアンサー
LISPプログラミングの課題についての質問(その2)
nininonickの回答
λx.E1という式の場合、 (E1の中に現れる)xはE1における束縛変数といいます。 同様に、λx.λy.E2の場合、 (E2の中に現れる)xとyはE2における束縛変数です。 E3という式の中で、λx.E4の形の式が現れず、かつxがE3の中に現れれば、 xはE3における自由変数といいます。 ここではこれをx∈φ(E3)と書き表します。 > (4) x≡/≡y かつ「xがφ(E)に含まれない,または,yがφ(Q)に含まれない」ならば,任意のλ式 E に対して [Q/x]λy.E=λy.[Q/x]E xがφ(E)に含まれない場合は、そもそも置換による影響がでません。 よって、(4)はyがφ(Q)に含まれない場合に、E上で置換を行うだけです。 > (5) x≡/≡y かつ x∈φ(E) かつ y∈φ(Q) ならば,任意のλ式 E ,任意の z(ただし,z は x≡/≡z≡/≡y かつ E(Q) の自由変数でも束縛変数でもない)に対して [Q/x]λy.E=λz.[Q/x]{z/y}E y∈φ(Q)なので、Qの中に現れるyは「自由変数」です。 しかし、これをEの中のxと置き換えてしまうと、 Qの中のyが「束縛変数」になってしまいます。 そこで、先にEの中に現れるyをすべて別名に書き換えてから 置換を行うというのが(5)です。 以下は実際に動作するプログラムです。 --- ;;; このプログラムはCommon Lispで記述しています。 ;;; ラムダ式をどのようにLispのリストに変換するかの規則が載っていなかったので、 ;;; 変換規則を次のようなものとしてプログラムを作成しました。 ;;; x ===> (x) ;;; λx.E ===> (l x . E) ;;; (E1)E2 ===> (E1 . E2) ;;; (defun free-vars (lexp) (cond ((= (length lexp) 1) lexp) ; atom is variable (Don't think about constant). ((eq (car lexp) 'l) (remove (cadr lexp) (free-vars (cddr lexp)))) ((consp (car lexp)) (union (free-vars (car lexp)) (free-vars (cdr lexp)))) (t (error "Bad lambda expression.")))) (defun substitution (x lexp1 lexp2) (cond ((= (length lexp2) 1) (if (eq x (car lexp2)) lexp1 lexp2)) ((eq (car lexp2) 'l) (cond ((eq x (cadr lexp2)) lexp2) ((or (not (member x (free-vars (cddr lexp2)))) (not (member (cadr lexp2) (free-vars lexp1)))) (print 1) (list* 'l (cadr lexp2) (substitution x lexp1 (cddr lexp2)))) ((and (member x (free-vars (cddr lexp2))) (member (cadr lexp2) (free-vars lexp1))) (print 2) (let ((z (gensym))) (list* 'l z (substitution x lexp1 (substitution (cadr lexp2) z (cddr lexp2)))))) (t (error "Bad lambda abstraction.")))) ((consp (car lexp2)) (cons (substitution x lexp1 (car lexp2)) (substitution x lexp1 (cdr lexp2)))) (t (error "Bad lambda expression."))))
関連するQ&A
- あるサイコロの分散について
分散を求める問題困っています かたよったさいころ10回投げる試行を行う ここで1の目、4の目が出る確率はそれぞれp 2の目、5の目が出る確率はそれぞれq 3の目、6の目が出る確率はそれぞれr とする ただし p、q、r>0、p+q+r=1/2 とする さらに1の目が出る回数をX、 5の目が出る回数をY 3の目が出る回数をZとする X、Y、Zの分散をそれぞれV(X)、V(Y)、V(Z)とする。 このとき、V(X)+V(Y)+V(Z)の最大値とp、q、rのその時の値をもとめよ 必要なら(x+y+z)^2=<3(x^2+y^2+z^2)を用いてもよい 私の考えは独立試行なので V(X)+V(Y)+V(Z)=V(X+Y+Z)とし、 E(X+Y+Z)=10(p+q+r)=5 までは分かったのですが E({X+Y+Z}^2)について、どういう式にすればよいのか分かりませんでした。 特にどのように変数p,q,rを組み込むのか、また分散の最大値の求め方を詳しく教えてください どこかで(x+y+z)^2=<3(x^2+y^2+z^2)の式を用いるのだと思うんですが・・
- ベストアンサー
- 数学・算数
- 平面と直線の交点
ある問題集の模範解答がいまいちよく理解出来ません。 A(3,0,6)と、S:(x-3)^2+(y-4)^2+(z-4)^2=4が与えられる時、点Aの球Sへの接線とxy平面との交点をPとする。Pの軌跡はどのようになるか というものです。 APの式を求めると、Pを(p,q,0)とおく時、(x-3)/(p-3)= y/q = (z-6)/(-6) (*1)となります。 また、AからSへの接線の集合はz=2y-2(*2)という平面を取ります。(ここまでは私の計算でもなっています。) その後、この二式からp,qに関する式を作ればいいのは分かるのですが、 解答ではy/q=(2y-8)/(-6)、と、いきなり(*1)と(*2)を連立しています。 そのままx-3=4(p-3)/(q+3)、z-6=-24/(q+3)と式を作り、接点をQとおいた時の方程式AQ・BQ=0に放り込んでq=1/6(x-3)^2+9/2という解答を出しています。 直線の式はx,y,zの3つの未知数に関する連立方程式なので、媒介変数を何かおいて計算しないとx,y,zの関係性が崩れてしまう公算が高い、という意識を持っているのですが、なぜいきなり連立しているのでしょうか。 どなたかご教授願います。
- ベストアンサー
- 数学・算数
- 確率変数(たぶん初歩的な問題です)
【問題】 離散型確率変数X,Yの分布がP(X=xi)=pi,P(Y=yi)=qi (i=1,2)であるとき,E(X+Y)=E(X)+E(Y)を示しなさい. 【自分なりの答え】 E(X+Y)=(x1+y1)p1q1+(x1+y2)p1q2+(x2+y1)p2q1+(x2+y2)p2q2 =x1p1(q1+q2)+x2p2(q1+q2)+y1q1(p1+p2)+y2q2(p1+p2) =x1p1+x2p2+y1q1+y2q2 =Σ(i=1~2)xipi+Σ(i=1~2)yiqi =E(X)+E(Y) と自分なりに考えて証明してみたのですが,これではXとYが独立な確率変数の場合の証明となってしまいます. XとYが独立な確率変数ではなくてもE(X+Y)=E(X)+E(Y)が成立するはずなのですが、どう証明すればよいのでしょうか? アドバイスをいただけないでしょうか?お願いします。
- ベストアンサー
- 数学・算数
- 確率計算 3つの確率変数がでてきたとき
確率変数X,Y,Zが独立で同分布に従うとき P(Z≧2Y+1≧3X+4)を求めよという問題なのですが、 Z≧2Y+1、Z≧3X+4の二つの不等式のへんぺんを足して 2Z≧2Y+3X+5 として P(Z≧Y+3/2*X+5/2)を求めればよいのでしょうか??? それとも他に何かやりかたがありますか?? 教えてください。
- 締切済み
- 数学・算数
- c言語 プログラミング
以下のプログラムで分からないところがあります。 数式をxpyの形式で入力して、(x,y:整数、p:x,-,*,/のいずれかの演算記号) 答えを表示するというプログラムなのですが、 5行目と9行目にある”-'0'”の意味が分からないので教えてください。 01: int x=0,y=0,z,i;char a[30],p; 02: printf("式を入力してください。:);gets(a); 03: for(i=0;a[i];i++) 04: if('0'<=a[i] && a[i]<='9') 05: x=10*x+a[i]-'0'; 06: else{p=a[i]-'0';break;} 07: for(i++;a[i];i++) 08: if('0'<=a[i] && a[i]<='9') 09: y=10*y+a[i]-'0'; 010: switch(p){ 11: case '+':z=x+y;break; 12: case '-':z=x+y;break; 13: case '*':z=x*y;break; 14: case '/':z=x/y;break; 15: default:puts("入力エラーです。");return 0; 16: } 17: printf("%d%c%d=%d\n",x,p,y,z); よろしくお願いします。(読みにくかったらメモ帳などにコピペしてください)
- ベストアンサー
- その他(インターネット・Webサービス)
- 全微分方程式の変数分離
斉次全微分方程式 P(x,y,z)dx+Q(x,y,z)dy+R(x,y,z)dz=0 をzが変数分離された式 P'(u,v)du+Q'(u,v)dv+dz/z=0 となることを示したいのですが、 まずx=uz,y=vzと置くと dx/dz=z*du/dz+u dy/dz=z*dv/dz+v となりますよね。 これを代入して色々やっているのですが、 どうやっても目的の式にもっていくことが出来ません…。 どなたかやりかただけでもお願いします。
- 締切済み
- 数学・算数
- 複数の点電荷の作る、任意の点での電位、電界
問題は 真空中でA(-d,0,0),B(d,0,0)にそれぞれ点電荷-q,4qが置かれている場合で、任意の点P(x,y,z)での電位、電界を求めよ というものです。 まず、電界から求めようと思い、 Aの作る電界 E_{a}→ = -q/4πε × 1/( (x+d)^2+y^2+z^2)^(3/2) (x+d,y,z) Bの作る電界 E_{b}→ = -q/4πε × 1/( (x-d)^2+y^2+z^2)^(3/2) (x-d,y,z) ともとまり、 任意の点での電界は上の2つのベクトルの重ね合わせというのはわかるのですが、数字がものすごく煩雑になってしまいます。。 もっと綺麗にはならないのでしょうか? また電位を求めるときに、いままで半径rを使って積分はしていたのですが、x,y,zを使ったときの積分の仕方がわかりません。。 教えてください、お願いします。
- ベストアンサー
- 物理学
- 大学の数学の問題です
t,p,q>0とする。広義積分 Γ(t)=∫(0~∞)e^(-x)x^(t-1)dx, B(p,q)=∫(0~1)x^(p-1)(1-x)^(q-1)dx をそれぞれガンマ関数,ベータ関数という。 (1)変数変換 x=u-uv, y=uvによって、次の式を証明せよ。 ∫(0~∞)∫(0~∞)e^(-x-y)x^(p-1)y^(q-1)dxdy=∫(0~∞)e^(-u)u^(p+q-1)du ∫(0~1)v^(q-1)(1-v)^(p-1)dv (2)B(p,q)=Γ(p)Γ(q)/Γ(p+q)を示せ。 教えていただけると嬉しいです。
- 締切済み
- 数学・算数
お礼
ご回答ありがとうございました.大変参考になりました.