KL1 では変数についてどんな型のデータが入るかは宣言しない. ソース・プ ログラム中の同じ節の同じ変数が, ある呼ばれ方をしたときはひとつの型のデー タ, 別のときには別の型のデータを値とすることがある. このあたりは Prolog や Lisp と同様である.
このことには利点も欠点もある. プログラム中の変数にはどんな種類の値が
入るかが, 原則としては入力データを与えるまでわからないので, 処理系が最
適化しにくいことは欠点のひとつである.
また, 人間がプ
ログラムを読むときにも, 変数の型という理解の助けになる情報が欠けている
分だけ, 強い型付けをする言語に比べると不便だろう.
一方利点としては, C の union のような特別の記法を用いなくてもさまざま な型のデータを混在させることができること, Ada の generic package のよ うな面倒な宣言をしなくても, いろいろな型のデータに対して共用できるプロ グラム・モジュールを簡単に作れることなどがある.
全体として, 変数に型がないことは, プログラムを読むのにはちょっと不便だ が, 書くのには便利である. このことは, 実験的なプログラムを何度も書き 直しながら, アルゴリズムを開発していくような場合には有利になる. これは AI 研究に変数に型をつけなくて良い Lisp が広く使われてきた理由のひとつ であろう. 一方, 既に確立されたアルゴリズムに基づいたプログラムを組み, それを長年に渡って保守していくような場合には不利もある.