1

私が作成したこのプログラムの使用方法を書き込もうとしてnewLISPいますが、文字列が長すぎるという不平を言い続けています。

ERR: string token too long : "$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"

文字列を切り刻み始めるまで、newLISP文字列に引用符を付けるべきではない、生のstrings()を使用するとうまくいくかもしれないなど、妄想的な理論を10分間罵倒して思いつきました。{}メッセージが消えて、ヘルプメッセージが非常に役に立たないところまで来ました。newLISP以上の文字を含む文字列が好きではないことが判明しました2048(2^11)。スー、

文字列リテラルの文字数に制限を設けるのはなぜですか?
なぜ 2048 文字なのか?

セルメモリを増やしても128MB(マニュアルを見ました)、何も変わりません。現在機能する唯一の解決策 (ハック的な解決策) は、ヘルプ文字列を文字の下にある 2 つの文字列に分割し、2048それらを で連結することstringです。
もう1つの奇妙な点は、文字を含む文字列が2048+replで異なる方法で出力されることです:

> (dup "&" 2048)
    [text]&&&&&&&&&&&&&& .....
           ......
                &&&&&&&&&&&&&&&[/text]


> (dup "&" 2040)
    "&&&&&&&&&&&&&&&&&&& .....
        .....
                &&&&&&&&&&&&&&&"
4

1 に答える 1

1

文字列を実行するには、次の 3 つの方法があります。

  • 引用符で囲む - エスケープ文字が処理されます - 2048 文字に制限されます
  • 中かっこ - エスケープ文字は処理されません - 2048 文字に制限されています
  • タグ内 - エスケープは処理されません - 長さは無制限です

マニュアルから:

引用符で囲まれた文字列は 2,048 文字を超えることはできません。長い文字列には、[text] および [/text] タグ区切り文字を使用する必要があります。newLISP は、2,048 文字を超える文字列出力に対してこれらのタグを自動的に使用します。

文字列は非常に長くなる可能性があります。

> (quiet (set 's (dup "&" 10E8))) ; don't bother to show the string :)
> (length s)
1000000000
> (10000 20 s)
"&&&&&&&&&&&&&&&&&&&&"
>

[/text]唯一の問題は、文字列を実際に終了させる前に、タグを含む可能性のある文字列内のソース コードを処理したい場合です。まだその時点に達していないようです... :)

于 2013-11-30T17:09:38.677 に答える