prolog - 绘制星星 Prolog 最多 N:画一条线太少了
问题描述
带有参数 N 和 M 的谓词 draw/2 应该最多绘制 M 个星,并且应该增加 N 直到 N > 5。示例:draw(3,5) =>
***
****
*****
我的问题是我的代码最多只能绘制四颗星,所以:
***
****
为什么在 draw/2 中存在 M1 =< N 条件时会发生这种情况?
line(0,_) :- nl.
line(X, Symbol) :-
write(Symbol),
Line is X - 1,
line(Line, Symbol).
% b)
draw(N, N).
draw(M, N) :-
line(M, '*'),
M1 is M + 1,
M1 =< N,
draw(M1, N).
解决方案
如果您想计数,您可能需要查看具有类似功能的库谓词的定义:numlist/3。
如果您仅采用 中的逻辑numlist_/3
,则删除最后一个参数,而是直接使用该值打印一行,您将得到:
draw(U, U) :-
!,
line(U).
draw(L, U) :-
line(L),
L2 is L+1,
draw(L2, U).
但是,您将需要添加参数检查。你可以这样做:
line(0) :-
!,
nl.
line(X) :-
succ(X0, X),
write(*),
line(X0).
draw(L, U) :-
L =:= U,
!,
line(U).
draw(L, U) :-
L < U,
line(L),
L2 is L+1,
draw(L2, U).
推荐阅读
- flutter - 如何取消 Cubit 内的 StreamSubscription?
- selenium - Selenium IE webdriver's getCurrentUrl() leaves out the part of url after the hash
- python - Trying to disable Variables In-line with Jupyter Code in PyCharm
- python - What is the optimal way to assign a value to a pandas DataFrame column from a column in a different row?
- python - Cannot run Object Detector issues on Windows (ImportError: cannot import name 'string_int_label_map_pb2' from 'object_detection.protos')
- javascript - How to pass the value or id of a checkbox to a table if it's checked on button click
- javascript - How do I loop an array of objects and return it's value inside the array?
- mysql - MySQL LIKE is case sensitive but I don't want it to be
- haskell - Can someone explain this haskell function to count occurences of char in a string
- html - 为什么我的表格列都向左移动而不是均匀分布?