0
我想一個數學表達式轉換,例如2X * Y + 5Z 成在序言單一元素的列表,但謂語Prolog將數學表達式轉換爲列表?
atom_codes(2x*y+5z, Codes)
給
ERROR: atom_codes/2: Type error: `atom' expected, found `2x*y+5z' (a compound)
所以我怎樣才能讀取表達式作爲一個列表?
我想一個數學表達式轉換,例如2X * Y + 5Z 成在序言單一元素的列表,但謂語Prolog將數學表達式轉換爲列表?
atom_codes(2x*y+5z, Codes)
給
ERROR: atom_codes/2: Type error: `atom' expected, found `2x*y+5z' (a compound)
所以我怎樣才能讀取表達式作爲一個列表?
正如其他評論指出的,2x*y+5z
不是一個原子。這也不是一個有效的Prolog術語,因爲2x
不是有效的術語。如果你將它寫成2*x*y+5*z
,它將是一個代表表達式語法樹的Prolog術語。
所以,一個問題是2x*y+5z
來自哪裏,你想要做什麼。你建議它來自Mathematica;你想分析一些Mathematica輸出嗎?如果是的話,你可以把它讀碼的列表,將其轉換成一個原子和/或字符,這是更好看的列表:
?- read_line_to_codes(user_input, Codes), atom_codes(Atom, Codes), atom_chars(Atom, Chars).
|: 2x*y+5z
Codes = [50, 120, 42, 121, 43, 53, 122],
Atom = '2x*y+5z',
Chars = ['2', x, *, y, +, '5', z].
如果你想從恢復語法樹這個,你將不得不編寫一個解析器。爲此,請查看明確的子句語法(DCG)。
在Prolog中'2x * y + 5z'不是* atom *。你可以把它放在單引號中,然後它會是一個原子:''2x * y + 5z''。 – lurker