Scheme Guile:应用所有元素的功能但是最后一个

时间:2015-10-16 07:24:55

标签: list functional-programming scheme fold guile

我需要将函数应用于所有元素,但列表中的最后一个元素。基本上我正在编写一种玩具编译器,因此给出一个像这样的算术术语:

   (+ 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

提前多多感谢。

1 个答案:

答案 0 :(得分:2)

我会将format用于此类案件。以下经过测试的*代码(感谢@Chris Jester-Young)可能会满足您的需求:

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

当您有州时,您可能更愿意使用fold-*。您的string-append可以替换为在编译术语上调用string-append的匿名函数,并在使用初始值fold调用时跳过逗号。