请参阅SML完整列表

时间:2013-01-19 08:13:36

标签: sml

有没有办法使用SML打印完整列表?

通常情况发生在SML中,当我有太多元素时,它打印出前面几个用“,”分隔的元素,然后用...省略列表的其余部分,但我想查看完整列表。有没有办法做到这一点?

val a =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20]

然后如果我在REPL a上写,它会返回如下内容:

a=[1,2,3,4,5,...]

3 个答案:

答案 0 :(得分:5)

假设您使用的是SML / NJ。

您要自定义的是Control.Print中的参考值。在这种情况下,您不能将printLength的值更改为更大的值,例如

Control.Print.printLength := 100;

一般来说,你要改变的是print*个引用。但是对于字符串,由于某种原因,他们选择将其称为stringDepth


假设您使用的是MosML。

Moscow ML Language Overview开始,描述了Meta单元公开这两个功能(以“控制交互系统”)

val printDepth : int ref  (* limit printed data depth *)
val printLength : int ref (* limit printed list and vector length *)

答案 1 :(得分:3)

我假设你正在使用Poly / ML。函数PolyML.print_depth表示在任何结构中应该有多深的打印(包括列表)。把它改成更大的东西:

PolyML.print_depth 500

答案 2 :(得分:0)

此输出仅用于调试,虽然方便,但这不是一种正确的方法(如果生成可执行文件,则无法运行可执行文件)。要打印出与您选择的ML提示中设置的打印限制无关的所有元素,您可以执行以下操作:

import React, { Component } from 'react';
import ListView from 'react-native';
import { connect } from 'react-redux';
import ListItem from './ListItem';

class LibraryList extends Component {

  componentWillMount() {
     const ds = new ListView.DataSource({
     rowHasChanged: (r1, r2) => r1 !== r2
     });

     this.DataSource = ds.cloneWithRows(this.prop.libraries);
  }

  renderRow(library) {
    return <ListItem library={library} />;
  }

  render() {
    return (
      <ListView
        dataSource={this.DataSource}
        renderRow={this.renderRow}
      />
    );
  }
}

const maptStateToProps = state => {
  return { libraries: state.libraries };
};

export default connect(maptStateToProps)(LibraryList);