のCommon Lispでの関数がコンパイルされるので
(defun hash-keys (hash-table)
(loop for key being the hash-keys of hash-table collect key))
を定義するには不利な点はありません。あなたのベンダーがこの機能を提供していれば、それはあなたのものよりもはるかに効率的で、同じことをするでしょう。
翻訳された言語では、自分自身を書くほとんどのものは、「本質的な」ルーチンに比べてパフォーマンス上の欠点があります。
ハッシュの内容を無駄にすることは無駄です。ループを使用すると、メモリを節約することなくハッシュを処理できます。だから多分代わりにマクロが必要です(一部のリスプはdohash
またはそれに類するものを拡張子として提供しています)。
(defmacro do-hash ((key-var val-var hash-expr &optional result-form) &body body)
(let ((hash-var (gensym "HASH-")))
`(loop with ,hash-var = ,hash-expr
for ,key-var being the hash-keys of ,hash-var
for ,val-var being the hash-values of ,hash-var
do (progn ,@body)
finally (return ,result-form))))
やハッシュマッピング機能:
(defun mapc-hash (hash-table fun)
(loop for key being the hash-keys of hash-table
for value being the hash-values of hash-table
do (funcall fun key value)))
言語は、誰でも分で書くことができ、このようなすべての可能なガジェットを持っているべきですか?
Common Lispには、バッテリが含まれていますが、実際には実行しにくい他の種類のバッテリです。たとえば、compile
は、実行時に動的にコードをコンパイルする機能です。ほとんどのユーザーにとって、ハッシュテーブルからキーや値を6つの異なる方法で引き出すのと比較して、最初からこのようなことを開発することは非常に困難です。
出典
2012-03-15 22:45:05
Kaz
Common Lispは非常に多くの時間を「電池が含まれていました」。人々はちょうど今より多くの(そして異なる種類の)電池を期待しています。 – Xach
Common Lispは現在Cと比べるとわずかに大きいだけです。これは現在、700ページのISO標準に近づいています。 (これは、1989年の200年代のページよりもわずかに「電池が含まれた」言語にすぎません) – Kaz
最近では、ほとんどの「電池が含まれています」という言葉は**そのようになっています。あなた自身が書くことは、パフォーマンスの欠点があります。 – Kaz