方案:将列表作为参数映射到函数

时间:2018-10-15 14:28:20

标签: list recursion functional-programming scheme lisp

如果我有一个接受3个参数并返回列表的函数:

<?php
//require_once "database.php";

class db
{
    public function __construct()
    {
    }

    public static function Somefunction($pr1 = null, $pr2 = null) // you forgot to declare a 'function'
    {
        echo 'hello from db';
    }
}

class database
{
    public $db = null;

    public function __construct()
    {
        $this->db = new db();
    }

    public function myFun()
    {
        $result = $this->db->Somefunction($pr1 = null, $pr2 = null);
    }
}

$invoke = new database();
$invoke->db->Somefunction();

我有一个这样的列表清单:

(some-function 1 2 3) --> '(3 2 1)

如何映射“某些功能”以将所有列表用作元素?

谢谢。

2 个答案:

答案 0 :(得分:2)

如果列表仅嵌套一次,则可以使用foldappend将它们变成单个列表,并用some-function对结果调用apply,即

(fold append '() '((1 2 3) (2 1 3) (3 2 1))) => (2 3 1 3 2 1 1 2 3)
(apply some-function (2 3 1 3 2 1 1 2 3))

否则,您可以将applysome-function包装在传递给map的lambda中

(map (lambda (x) (apply some-function x)) '((1 2 3) (2 1 3) (3 2 1)))

答案 1 :(得分:2)

我不确定你的意思是什么。

(define (rev-list a b c)
  (list c b a))

(rev-list 1 2 3)
⇒ (3 2 1)

(apply rev-list '((1 2 3) (2 1 3) (3 2 1)))
⇒ ((3 2 1) (2 1 3) (1 2 3))

(map (lambda (l) (apply rev-list l)) '((1 2 3) (2 1 3) (3 2 1)))
⇒ ((3 2 1) (3 1 2) (1 2 3))