• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[LISPプログラミング] ラムダ計算 - 置換(substitution))

LISPプログラミングの課題についての質問(その2)

このQ&Aのポイント
  • LISPプログラミングの課題についての質問(その2)です。課題はλ式のリダクションに関する関数の作成です。
  • 質問では課題の内容、必要な知識、試作したプログラム、および質問への回答を説明しています。
  • 質問者はラムダ計算について初めて耳にしたとのことで、自由変数や束縛変数の概念を無視してプログラムを作成したため、誤った動作がする可能性があると述べています。また、(4),(5)に対応する処理の記述方法についてもアドバイスを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

λ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."))))

noname#259419
質問者

お礼

ご回答ありがとうございました.大変参考になりました.

全文を見る
すると、全ての回答が全文表示されます。

関連する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)の式を用いるのだと思うんですが・・

  • rotの計算

    点電荷Qの位置に原点をとり、P点の位置ベクトルをrとする 点電荷QがP点に作る電場は E(r)=Qr/4πr^3 でありr=(x、y、z)とおいてrotE(r)のx、y、z成分は? という問題で 解答に r=(x^2+y^2+z^2)^1/2 より ∂Ex/∂y=(Q/4π)∂/∂y(z/r^3)     =(Q/4π)(1/r^3+z(∂/∂y)(1/r^3)) と書いてあったのですが∂/∂y(z)(1/r^3)からなぜ1/r^3になるかがわかりません お願いします

  • 平面と直線の交点

    ある問題集の模範解答がいまいちよく理解出来ません。 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); よろしくお願いします。(読みにくかったらメモ帳などにコピペしてください)

  • 統計学について

    統計学の問題です。平均はできたのですが、分散ができなくて困っています。解答、解説をどうかよろしくお願いします。問題は以下です。 確率変数X、Yは独立で、それらの平均と分散はE(X)=μ1、E(Y)=μ2、V(X)=σ1、V(Y)=σ2であるとする。εはベルヌーイ分布Ber(p)に従う確率変数であり、X、Yとは独立であるとする。そのとき、確率変数Z=εX+(1-ε)Yの平均と分散を求めよ。 ちなみに、答えは、E(Z)=pμ1+(1-p)μ2、V(Z)=pσ1+(1-p)σ2+p(1-p)(μ1-μ2)^2 です。

  • 全微分方程式の変数分離

    斉次全微分方程式 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)を示せ。 教えていただけると嬉しいです。