【问题标题】:Problem with Prolog list recursion keeps returning syntax error operator expectedProlog 列表递归的问题不断返回预期的语法错误运算符
【发布时间】:2021-08-06 08:18:26
【问题描述】:
findSqr([],[]).
findSqr([X|Y],[SX|SY]) :-
        number(X)
        SX is X * X,
        findSqr(X,SX).
findSqr([X|Y],[X|SY]) :-
        \+number(X),
        findSqr(Y,SY).

它假设返回一个列表的元素,当平方时,小于 100。

例子

findSqr(X,[23,9,67,12,222,19,6]).

X = 9 Y = 81 ;
X = 6 Y = 36 ;

【问题讨论】:

    标签: list recursion prolog


    【解决方案1】:

    您目前在number(X) 行的末尾缺少一个逗号。这会导致操作员预期的语法错误。

    尽管如此,您的代码仍然没有按照您的意愿行事。

    您没有对小于 100 的值进行测试,也没有在返回变量中构建结果。

    试试这个:

    findSqr([],[]).
    findSqr([X|Y],[X|T]) :-
            number(X),
            SX is X * X,
            SX < 100, !,
            findSqr(Y,T).
    findSqr([X|Y],T) :-
            findSqr(Y,T).
    

    当我运行它时,我得到了这个:

    ?- findSqr([23,9,67,12,222,19,6],X).
    X = [9, 6].
    

    9 和 6 是输入列表中仅有的两个平方小于 100 的数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      相关资源
      最近更新 更多