Scheme Guile:应用函数除最后一个元素之外的所有元素

Scheme Guile: apply function all ellements but last one

我需要对除列表中最后一个元素之外的所有元素应用一个函数。基本上我在写一种玩具编译器,所以给出这样的算术项:

   (+ 1 10)

我想要

  Plus(1, 10)

我得到了以下信息:

  Plus(1, 10 ,)

使用地图功能:

(string-append "Plus ("   
                         (fold-right string-append ""  
                             (map (lambda (x) (string-append x ",")) (map compile-term (cdr t)))))    

其中 compile-term 是我正在编写的函数,t 是我编译的术语。

所以我的问题如下,是否有一种干净的方法可以使用 Guile Scheme 将函数应用于列表中除最后一个元素之外的所有元素?或者唯一的解决方案是使用循环 here.

非常感谢。

对于这种情况,我会使用 format。以下经过测试*的代码(感谢@Chris Jester-Young)可能会满足您的需要:

(format #f "~a(~{~a~^, ~})" (compile-term (car seq))
                            (map compile-term (cdr seq)))

当你有状态时,你可能更喜欢使用 fold-*。您的 string-append 可以替换为在编译条件下调用 string-append 的匿名函数,并在使用 fold.

的初始值调用时跳过逗号