0
我正在Prolog中編寫一個程序,在那裏給出一組語法規則並且用戶輸入一個句子,我必須確保該句子遵循給定的規則。 我只停留在一個規則: EXPR - >(表達式)也可以寫成EXPR - >(ID運算表達式)Prolog語法錯誤:表達式期望檢查括號
這裏是我的這部分代碼:
expr(X) :- list(X), length(X, Length), =(Length, 5),
=(X, [Left, Id, Op, Expr | Right]),
=(Left, ‘(‘),
id(Id), op(Op), expr([Expr]),
=(Right, ‘)’).
我相信問題在於檢查括號,因爲此代碼的其他部分在其他地方使用時沒有任何錯誤。當使用=(Left,'(')或=(Right,')')時,我得到一個語法錯誤:預期表達式爲什麼我會得到這個錯誤,以及檢查左括號和右括號的更好方法是什麼?
除了什麼@CapelliC說一下單引號,您的列表'[左,身份證,歐普,EXPR |右]'有'右'作爲尾部,這是一個列表。所以如果它是一個正確的paren,它將是'''''''''''',而你正在比較一個原子'=(Right,')')'。你需要將你的列表寫成'[Left,Id,Op,Expr,Right]'或'[Left,Id,Op,Expr | [Right]]'如果你想'Right'是5元素列表中的最後一個原子。 – lurker