jtoverka 发表于 2020-9-28 15:25:55

LISP结果缓冲区

我正在寻找一种方法来处理更复杂的结果缓冲区,如深度嵌套的列表。我希望它能把结果缓冲区转换成一个List
。如果有人有代码,他们想分享我会很感激。这是我目前掌握的情况。
///
/// Converts ato . If the Lisp arguments are below the minimum or above the maximum required, an exception will be thrown.
///
///
///
///
///
///
public static List HandleLispArguments(ResultBuffer arguments, int minimum, int maximum)
{
    if (arguments == null)
      throw new System.Exception("too few arguments");
    TypedValue[] rawArgs = arguments.AsArray();
    List Arguments = new List();
            
    // List Depth
    int depth = 0;
            
    Action, int, object> Add = null;
            
    Add = (list, depth, item) =>
    {
      if (depth == 0)
            list.Add(item);
      else
            Add((List)list, --depth, item);
    };
    foreach (TypedValue item in rawArgs)
    {
      object selected = item;
      if (item.TypeCode == (short)LispDataType.ListBegin)
      {
            Add(Arguments, depth, new List());
            depth++;
            selected = null;
      }
      else if(item.TypeCode == (short)LispDataType.ListEnd)
      {
            depth--;
            selected = null;
      }
      if (selected != null)
            Add(Arguments, depth, selected);
    }
    if (Arguments.Countmaximum)
      throw new System.Exception("too many arguments");
    return Arguments;
}

**** Hidden Message *****

Chumplybum 发表于 2020-9-28 19:10:34

看看这里:https://forums.augi.com/showthread.php?154713-NET-Return-Conversion-to-TypedValue/page2,它看起来类似于你试图实现
干杯,马克

DavidS 发表于 2020-9-29 15:38:03

我不知道结果如何,但Tony Tanzillo正在测试类似的东西…
http://www.theswamp.org/index.php?topic=43181.msg483994#msg483994
这是一个很好的例子

gile 发表于 2020-9-30 01:55:16

谢谢吉尔!
这是我正在寻找的完整实现。
页: [1]
查看完整版本: LISP结果缓冲区