我使用swi-prolog 7.3.31。
我有以下形式的复合词question
:
question(q_(Question),y_(Yes),n_(No))
其中Yes
和No
可以是atom
或其他复合词question
,依此类推。
我正在使用reply_html_page
的表单,其中我显示问题Question
的文字,并且我有两个提交按钮,其中一个用于'是'一个用于' no'。
以下是我的表单中的“是”和#39;按钮:
form([class = 'form-inline ',
action = '/choice_handler',
method = 'POST'], [
input([name = choice,
id = choice,
type = hidden,
class = 'form-control',
value = 'yes']),
input([name = question,
type = hidden,
value = Yes ]),
button([class = 'btn btn-default yes',
type = submit], ['yes']) ])
这是我的问题,我想传递Yes
的值以递归显示新问题或最终结果,但是我没有这样做,因为输入表单的value
必须是原子而不是偶然术语。
因此问题:有没有办法将复合词传递给handler
?
答案 0 :(得分:1)
请注意,在交换数据时,原子通常足够,因为您可以使用 atom_to_term/3
将原子转换为复合词:
atom_to_term(+Atom, -Term, -Bindings)
使用选项variable_names将{Atom'作为
read_term/2
的输入,并返回Term中的读取项和Bindings中的变量绑定。绑定是Name = Var
个对的列表,因此可以访问实际的变量名。另见read_term/2
。如果Atom没有有效语法,则会引发syntax_error异常。新代码应该使用read_term_from_atom / 3。
示例强>:
?- atom_to_term('the(f(X,Y),Z)', Term, Bindings). Term = the(f(_1596, _1598), _1604), Bindings = ['X'=_1596, 'Y'=_1598, 'Z'=_1604].
因此,在适当的一般假设下,你可以简单地取原子并恢复复合词。