[問題] 資結

看板Grad-ProbAsk作者 (...)時間15年前 (2009/04/09 23:57), 編輯推噓0(006)
留言6則, 3人參與, 最新討論串2/4 (看更多)
procedure p(a,b,c) begin b=b+2; c=c*a; end program main (in, out) begin m:=3; n:=4; p(m+n,m,m); print(m); end 請問使用call-by name算出來的值是29還是45啊? 是先做乘法還是加法啊?? 有人知道嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.172.245.151

04/10 00:00, , 1F
m = m + 2 (m已經被修改為5) m = m * (m+n) == 45
04/10 00:00, 1F

04/10 00:01, , 2F
call by name 的規則是,當前面的敘述有修改到值
04/10 00:01, 2F

04/10 00:01, , 3F
則後面的敘述必須yield直到前面的敘述完成
04/10 00:01, 3F

04/10 01:25, , 4F
我想問的是 c=c*a是被換成m=m*(m+n)=45
04/10 01:25, 4F

04/10 01:25, , 5F
還是m=m*m+n=29 ?
04/10 01:25, 5F

04/10 10:50, , 6F
45!
04/10 10:50, 6F
文章代碼(AID): #19tXhXL3 (Grad-ProbAsk)
討論串 (同標題文章)
文章代碼(AID): #19tXhXL3 (Grad-ProbAsk)