任意引数のmap
30分プログラム、その411。昨日のやつにインスパイアされて、任意引数を受けとれるmapを作ってみた。
gosh> (map* + '(1 2 3) '(2 3 4)) (3 5 7)
実際のところGaucheのmapは、任意個の引数を取れるから必要はないんだけど。
使い方
gosh> (map* (+ <> 1) (list 1 2 3)) (2 3 4) gosh> (map* + '(1 2 3) '(2 3 4)) (3 5 7)
ソースコード
#! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- ;; ;; map.scm - ;; ;; Copyright(C) 2008 by mzp ;; Author: MIZUNO Hiroki / mzpppp at gmail dot com ;; http://howdyworld.org ;; ;; Timestamp: 2008/11/11 22:43:41 ;; ;; This program is free software; you can redistribute it and/or ;; modify it under MIT Lincence. ;; (use util.match) (define (map-1 f xs) (match xs (() ()) ((x . xs) (cons (f x) (map-1 f xs))))) (define (map* f . xs) (if (memq '() xs) '() (cons (apply f (map-1 car xs)) (apply map* f (map-1 cdr xs)))))