网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月01日漏签0天
haskell吧 关注:832贴子:1,639
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 6回复贴,共1页
<<返回haskell吧
>0< 加载中...

学习haskell艰难第一步

  • 只看楼主
  • 收藏

  • 回复
  • 红温玄武简一郎
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个bindS我差不多看懂了 就是改变状态
get put yield是针对state的一些helpfunction
但是use'是个什么逻辑
他把lambda和$一起用我就完全看不懂了


  • 哥纱布
  • 核心吧友
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
state monad的标签是s -> (s, a) 其中s表示状态,a表示状态转换得到的中间结果的类型。
use的含义是,把状态(这里是一个数)取出来作为结果,并且更新状态(自增1)。
假设当前状态是s=3
将s带入use = \x -> (x + 1, x)
可得转移后的状态(下一个状态)为s = x + 1, 结果为a = x也就是当前状态


2025-08-01 05:27:27
广告
不感兴趣
开通SVIP免广告
  • 红温玄武简一郎
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
新的问题出现了
我的理解先从第一个d6取一个数值
再从第二个d6取一个数值
然后生成一个tuple
但是这段代码才三行
为什么所有的结果都出来了



  • 哥纱布
  • 核心吧友
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回3L
这代码不可能是你底下运行结果。
底下应该return (x, y)
之所以生成所有排列:
list monad的return是 return x = [x]
而list monad的bind操作,也就是>=,也被称为flatmap,平坦map的结果。
flatmap f xs = concat (map f xs)
举例子
假设f x = [x+10, x * 10]则
flatmap f [a, b, c] =
concat [[ a + 10, a * 10], 略过,略过]
= [ a + 10, a * 10, b + 10, b * 10, c + 10, c * 10]
你的代码是两层flatmap,自己算算答案对不对


  • 红温玄武简一郎
  • 初级粉丝
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这东西太难了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回haskell吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示