--| Web控件演示--介绍Web Fudget的示例(用于声明性Web编程)--2016年功能编程课程。--托马斯·哈格伦{-这从一个骨架开始,定义被填充在讲座期间。-}导入WebFudgets导入匆忙。绘图。帆布main=runF(mconcat示例)示例=[ex1,ex2,ex3,ex4,ex5,ex6,ex7,ex8,ex9,ex10]shellF标题fud=boxF(h2F(textF标题)>+fud)----------------------------------------------------------------------------------*Hello world示例ex1=shellF“你好”(textF“你好世界”)----------------------------------------------------------------------------------*说明平行组合ex2=shellF“带按钮的Hello world”$textF“Hello world!”>+<buttonF“点击我”----------------------------------------------------------------------------------*说明串行组合和无状态应用程序代码ex3=shellF“测试阶乘函数版本1的程序”$showF=<=mapF fac=<=读取showF系数0=1fac n=n*fac(n-1)----------------------------------------------------------------------------------*图解布局和装饰ex4=shellF“测试阶乘函数版本2的程序”$pF(textF“x=”+<读取显示F)=>映射F函数=>=pF(textF“x!=”+<显示F)----------------------------------------------------------------------------------*说明有状态应用程序代码ex5=shellF“一个递增计数器”$showF=<=状态F incr 0=<=按钮F“增量”incr n BtnClick=(n+1,n+1)----------------------------------------------------------------------------------*说明如何处理并行合成的输出ex6=shellF“递增/递减计数器”$showF=<=状态F count 0=<=(buttonF“Up”>+<buttonF“Down”)哪里count n(左BtnClick)=(n+1,n+1)count n(右BtnClick)=(n-1,n-1)----------------------------------------------------------------------------------*说明事物列表的并行组成data CounterButton=向上|向下|重置派生(Eq、Show、Bounded、Enum)ex7=shellF“向上/向下/重置计数器”$showF=<=状态F计数0=<=列表F按钮哪里buttons=[(b,buttonF(show b))|b<-[向上..重置]]count n(b,BtnClick)=(new,new),其中new=fn b nfn向上n=n+1fn向下n=n-1fn重置n=0----------------------------------------------------------------------------------*说明反馈回路ex8=shellF“可加载上/下计数器”$loopLeftF(mapF Left=<=readShowF=<=stateF计数0)=<=(buttonF“Up”>+<buttonF“Down”)哪里count_(左n)=(n,n)count n(右(左BtnClick))=(n+1,n+1)count n(右(右BtnClick))=(n-1,n-1)----------------------------------------------------------------------------------*一个更大的例子数据计算器按钮=加号|减号|次数|刻度|输入|清除|数字Int推导公式ex9=shellF“简单计算器”$showF=<=状态F计算[0]=<=键盘F哪里键盘F=表格F 4个按钮FbuttonsF=列表F[d 7,d 8,d 9,op Div,d 4,d 5,d 6,操作时间,d1,d2,d3,运算-减号,clr,d 0,ent,op Plus]d n=(数字n,buttonF(显示n))op o=(o,按钮F(op标签o))ent=op输入clr=op清除opLabel Plus=“+”opLabel减号=“-”opLabel时间=“×”opLabel Div=“÷”opLabel Enter=“Ent”opLabel Clear=“C”计算(n:s)(数字d,_)=新(n*10+d)s计算s(输入,_)=(0:s,头s)计算s(清除,_)=([0],0)计算(y:x:s)(加,_)=新(x+y)s计算(y:x:s)(减,_)=新(x-y)s计算(y:x:s)(次数,_)=新(x*y)scalc(y:x:s)(Div,_)=新(x`Div`y)s计算s_=(s,水头s)新n s=(n:s,n)----------------------------------------------------------------------------------*说明图形输出中画布的使用ex10=shellF“画布示例”$pF(textF“绘制具有”+<readShowF>+textF“边的多边形”)=>=mapF多边形=>=画布F(300300)多边形n=do颜色(RGB 255 255 128)(填充(路径ps))颜色(RGB 0 0 255)(笔划(路径ps))text(20,20)“简单画布示例”哪里ps=地图角[0..n]c@(cx,cy)=(150150)--中心r=100——围圆半径角点i=(cx+r*cosa,cy+r*sina)哪里r=100a=2*pi*(实i/实n)实数x=来自积分x