LISP创建一个数组

时间:2016-04-20 11:31:05

标签: arrays lisp common-lisp

当我使用此函数创建数组时,出现以下错误:

class Example extends React.Component {
    constructor(){
    super();
    this.state = {
        items: [{id:1, name:'Hello'},{id:2, name:'World'},
               {id:3, name:'React'},{id:4, name:'Example'}]
    };

  }
  click(item){
    alert(item)
  }
  render(){
    const list = this.state.items.map((item,index) => {
        return <li key={index} onClick={this.click.bind(this,item.name)}>{item.name}</li>
    })
    return <ul>
        {list}
    </ul>
  }
}

React.render(<Example />, document.getElementById('container'));

列表的长度应该是一个非负整数,在这种情况下为3,那么为什么我会收到此错误,我该怎么做呢?

> (defun f1(lst)
   (setf m (make-array '((length lst) 3))))
F1
> (f1 '(1 2 3))
Error: Not a nonnegative integer - (LENGTH LST)    

1 个答案:

答案 0 :(得分:4)

您引用了列表((length lst) 3))),因此其值为((LENGTH LST) 3))),其中第一个元素不是数字而是两个符号列表。

使用list来构建一个新的列表,在该列表中评估第一个参数:

CL-USER> (defun f1(lst) 
           (setf m (make-array (list (length lst) 3))))
F1
CL-USER> (f1 '(1 2 3))
#2A((0 0 0) (0 0 0) (0 0 0))

在Lisp语言中,'((A) 3)(QUOTE ((A) 3))的缩写,其被评估为((A) 3)。另一方面,(list (A) 3)会定期评估,评估(A)对函数A的调用,最后生成列表(value-of-calling-a 3)