普通の手続き型言語の変数は, 特定の番地から始まるある大きさのメモリ領域 につけた名前である. 計算機のメモリを表すものだから, 中身を読み出した り書き込んだりすることができる. KL1の変数はメモリのような値の格納場所 を表すものではなく, 値につけた名前である. だからその値を参照すること はできても, 値を変更するなどということはできない.
たとえば, 多くのプログラム言語ではサブルーチンの引数を用いる時に名前で 参照できるように, 引数に名前をつける. C言語の場合, 引数名は引数の値が 格納してある場所の名前である. したがって, その内容を書換えることもで きる. ところが論理型言語では, 引数名が指し示すのは渡された値そのもの であって, 引数値を格納してある場所ではない. だからそれを書換えるなど ということはできない.
論理変数で特徴的なのは, 値が決まっていないという状態があることである. 値を書換えることはできなくても, 決まっていない値を決めることはできる. これによって変数を介した値の受渡しができる. プログラム中のふたつの部 分が同じ変数を共有すれば, 片方ではその値を決め, もう一方ではその値を用 いることができる.