Guile Scheme 之 format

发布于 2022-09-06 06:24:38 字数 1333 浏览 20 评论 6

本帖最后由 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 函数为我们提供了一种便捷的方式来格式化字符串.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

动听の歌 2022-09-12 02:50:19

Thank you very much!

树深时见影 2022-09-11 19:34:10

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"

复制代码

忆梦 2022-09-11 10:30:31

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

复制代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文