免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6043 | 回复: 6
打印 上一主题 下一主题

Guile Scheme 之 format [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-30 23:17 |只看该作者 |倒序浏览
本帖最后由 Lispor 于 2010-11-30 23:23 编辑

guile 中的 format 函数与 c 语言中的 printf 函数作用相同, 但是远比它强大, 其类似于 common lisp 中的 format 函数, 但是他们并不相同, guile 中的 format 函数并没有 common lisp 中的全部特性.

guile 默认的 format 函数为 simple-format, 它只支持 ~A 和 ~S 格式化字符, ~A 使用 display 函数, 而 ~S 使用 write 函数. 若想用 format 的全部特性, 需加载 (ice-9 format) 模块:
  1. guile> (use-modules (ice-9 format))
复制代码
这样我们就可以用 format 函数来进行格式化字符串了.

我们先看一个例子:
在此, 我们有一个列表, 我们想用逗号<,>分割打印列表中的各个元素
比如:
有一列表 (1 2 3 4)
要打印出 1, 2, 3, 4
下面是 format 实现:
  1. guile> (define xs '(1 2 3 4))
  2. guile> (format #f "~{~a~^, ~}" xs)
  3. "1, 2, 3, 4"
复制代码
下面是用 let 语句来实现同样的功能:
  1. guile> (let loop ((ls  xs))
  2. ...        (if (null? (cdr ls))
  3. ...            (format #f "~a" (car ls))
  4. ...            (string-append (format #f "~a, " (car ls))
  5. ...                           (loop (cdr ls)))))
  6. "1, 2, 3, 4"
复制代码
从这两个例子我们可以看出 format 函数为我们提供了一种便捷的方式来格式化字符串.

论坛徽章:
0
2 [报告]
发表于 2010-12-30 18:41 |只看该作者
Thanks for your introduction very much!
And would you tell me how I can get result like following? Thanks!

  1. print "%02x, %04x", 1, 1
  2. 01, 0001
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2010-12-31 12:54 |只看该作者
you can get it following
  1. scheme@(guile-user)> (format "~2,'0x, ~4'0x" 1 1)
  2. "01, 0001"
复制代码
and more than that:
  1. scheme@(guile-user)> (format "~10,'*,'-,3:d" 7654321)
  2. "*7-654-321"
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-12-31 13:26 |只看该作者
Thank you very much!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2011-01-17 20:10 |只看该作者

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2011-01-17 20:11 |只看该作者

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2011-01-20 20:05 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP