4

letリストを動的に分解したいステートメントがあります。以下は私の解決策です:

symList  ;; list of some Strings which will become the vector of Symbols to assign to
valList  ;; list of some values, same length as symList

(let [(map read-string symList) valList]
  ...)

の値の例symList("pt1" "pt2")、の値の例は次のvalListとおりです。(1 2)

ただし、これにより、最初の部分が「サポートされていないバインディング フォーム」であるという例外が生成されます。構文引用に関して何かが欠けているか、それが不可能であると思われます。アドバイスをいただければ幸いです。

編集:これらの値が実行時に来ることしか知らないため、このアプローチです。次に、レキシカル スコープを後で渡すことができるようにする必要があるため、let.

4

4 に答える 4

2

symList と valList がコンパイル時に正しい値を持っている場合、これを行うマクロを作成できます。それらが実行時にのみ知られている場合は、関数を使用/作成して破壊を行い、その破壊の結果をデータ構造として返す必要があります。

2 番目のケースでは、このような単純なものの場合、 を使用(zipmap symList valList)してマップを取得できます。

于 2010-07-12T18:02:50.523 に答える
0

リストを動的に分解する方法を見つけることはできませんでしたが、動的スコープではなく語彙的に値を作成することに興味がある人にとっては、intern必要な名前空間がうまく機能することがわかりました。

于 2010-07-14T11:51:15.077 に答える
0
(let [valList (map str symList)]
   (somefun valList))

取得しているエラーは、let ステートメントが後方にあったためです (let [val SOURCE] STUFF)

于 2010-07-12T17:55:56.987 に答える
0

多分マッチはあなたが望むものを与えることができます

于 2010-07-13T05:34:53.893 に答える