2015-01-10 3 views
1

Я пишу проект в клипах, где у меня есть некоторые скоординированные объекты (квадраты настольной игры). Я определяю свои шаблоны, как это:вернуть два значения в функции клипов

(deftemplate square 
    (slot x (type INTEGER)) 
    (slot y (type INTEGER)) 
) 

Так что я хочу функцию, которая может получить направление аргумент как вправо, влево, вверх, вниз и х, у COORDS и вернуть COORDS из квадрата, лежащих в? это направление (граничащее с текущим).

Проблема в том, что функции могут возвращать одно значение, в то время как мне нужны как x, y.

Я попытался

(return ?x ?y) 

и

(return (?x ?y)) 

, но они оба дают ошибки синтаксиса.

есть ли способ достичь этого или мне нужно обходное решение?

Спасибо за ваше время.

ответ

2

Используйте create $ для размещения нескольких значений в пределах значения multifield. Затем вы можете использовать nth $ для получения отдельных значений:

CLIPS> 
(deffunction direction() 
    (return (create$ 1 -1))) 
CLIPS> (direction) 
(1 -1) 
CLIPS> (nth$ 1 (direction)) 
1 
CLIPS> (nth$ 2 (direction)) 
-1 
CLIPS> 
Смежные вопросы